Как написать сценарий оболочки для компиляции нескольких встроенных SQL-файлов в C (.sqc)? - PullRequest
0 голосов
/ 01 июля 2010

Я написал 3 файла .sqc, то есть встроенный sql на языке хоста C. Мне нужно сделать сценарий оболочки (Unix), чтобы просто скомпилировать все 3 файла sqc подряд.Как я могу это сделать?Прямо сейчас я могу по отдельности запустить каждый файл .sqc, используя Makefile, который в основном преобразует файл .sqc в файл ac, а затем компилирует его.Могу ли я сделать 3 отдельных файла Makefile и запустить их все через скрипт оболочки?Если так, то как?Могу ли я сделать один Makefile, который может скомпилировать все 3 .sqc независимо и скомпилировать их после этого с помощью сценария оболочки?Если так, то как?Любые другие варианты?

Вот файл Makefile, который может скомпилировать только один файл .sqc:

NAME=sample

DB2PATH = /sqllib
CC=gcc
CFLAGS=-I$(DB2PATH)/include
LIBS=-L$(DB2PATH)/lib -R$(DB2PATH)/lib -ldb2

all: $(NAME)

$(NAME): $(NAME).sqc util.o
    db2 connect to sampleDB
    db2 prep $(NAME).sqc bindfile
    db2 bind $(NAME).bnd
    db2 connect reset
    $(CC) $(CFLAGS) -c $(NAME).c 
    $(CC) $(CFLAGS) -o $(NAME) $(NAME).o util.o $(LIBS)

clean:
    rm -f $(NAME) $(NAME).c $(NAME).o $(NAME).bnd

util.o : util.c
    $(CC) -c util.c $(CFLAGS)

Возможный сценарий оболочки (Unix) и пример Makefile могут помочь.

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Этот Makefile должен выполнять все три за один шаг, просто наберите "make".Обратите внимание, что вам придется изменить вторую строку, чтобы отразить имена ваших реальных файлов .sqc.

Также обратите внимание, что я не знаком с sqc и Я не проверял это Я просто работаю с твоим Makefile.

# THIS IS THE ONLY LINE YOU'LL HAVE TO CHANGE:
NAMES = file1 file2 file3

DB2PATH = /sqllib
CC=gcc
CFLAGS=-I$(DB2PATH)/include
LIBS=-L$(DB2PATH)/lib -R$(DB2PATH)/lib -ldb2

all: $(NAMES)

# This will convert .sqc into .c
%.c: %.sqc
    db2 connect to sampleDB
    db2 prep $< bindfile
    db2 bind $*.bnd
    db2 connect reset

# This will compile .c into .o, whether it's fileN.c or util.c
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

# This will link fileN.o and util.o into fileN
$(NAMES): % : %.o util.o
    $(CC) $(CFLAGS) -o $@ $^ $(LIBS)

# This is just to assure Make that that isn't really a file called "clean"
.PHONY: clean

clean:
    rm -f $(NAMES) $(NAMES:=.c) $(NAMES:=.o) $(NAMES:=.bnd)
0 голосов
/ 01 июля 2010
DB2PATH = /sqllib 
CC=gcc 
CFLAGS=-I$(DB2PATH)/include 
LIBS=-L$(DB2PATH)/lib -R$(DB2PATH)/lib -ldb2 

all: $(NAME) 

$(NAME): $(NAME).sqc util.o 
    db2 connect to sampleDB 
    db2 prep $(NAME).sqc bindfile 
    db2 bind $(NAME).bnd 
    db2 connect reset 
    $(CC) $(CFLAGS) -c $(NAME).c  
    $(CC) $(CFLAGS) -o $(NAME) $(NAME).o util.o $(LIBS) 

clean: 
    rm -f $(NAME) $(NAME).c $(NAME).o $(NAME).bnd 

util.o : util.c 
    $(CC) -c util.c $(CFLAGS) 

Предположим, у вас есть три файла: file1.sqc file2.sqc file3.sqc, и ваш make-файл сохраняется как mksqc.mk

Сценарий:

make -f mksqc.mk NAME=file1
make -f mksqc.mk NAME=file2
make -f mksqc.mk NAME=file3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...