2015-04-02 1 views
1

Я написал две программы. Первый, ProgramOne, создает входные файлы для второй программы, ProgramTwo (две программы не имеют общих файлов, выход, написанный ProgramOne, является всего лишь вкладом ProgramTwo). Иногда запуск первой программы занимает некоторое время, но в другое время требуется всего несколько секунд, в зависимости от размеров, на которых я имитирую.Как создать файл makefile, который запускает несколько программ друг за другом в c?

Поэтому я хотел бы, чтобы поместить все мои файлы в одну папку и создать Makefile, который способен сделать команды для запуска:

  1. ProgramOne
  2. ProgramTwo
  3. Эти две программы сразу после друг друга

Первые два не так сложно написать, третий - проблема (так что в данный момент я могу запустить ProgramOne, а затем запустить ProgramTwo, что заставляет меня tw o команд в терминале, но я хотел бы также сделать эту команду в некоторых случаях). Как я могу разъяснить компилятору, что я хочу, чтобы две программы исполнялись друг за другом.

На данный момент у меня довольно стандартный Makefile, но я написал следующее:

(примечания что programone.c содержит основную функцию, и только основную-функцию, в зависимости от ничего от Суданского Красного Полумесяца (файлы для ProgramTwo))

(Еще одно важное замечание: бежать ProgramTwo, мне нужно указать некоторые аргументы в терминале я бы написать:.. ./RunProgramTwo -v results Как мне нужно указать эти аргументы, когда я хотел для запуска двух программ друг за другом?)

(Я также оставил некоторые вещи, как чистую и дикскую команду, но я не думаю, что они имеют отношение к этому делу. Если вы так думаете, однако, я представлю свою полную Makefile по запросу)

NVCC = nvcc 
NVCFLAGS = -arch=sm_30 
CFLAGS = -Wall -pedantic -g 
LDLIBS = -lz -lpthread 
SRCS := allfiles.c 
OBJS := allfiles.o 
all: .depend RunProgramOne RunProgramTwo RunAll 
RunProgramOne: $ programone.o 
     ${NVCC} ${NVCFLAGS} ${LDLIBS} $^ -o [email protected] 
RunProgramTwo: ${OBJS} main.o 
     ${NVCC} ${NVCFLAGS} ${LDLIBS} $^ -o [email protected] 
RunAll: RunProgramOne RunProgramTwo 
depend: 
     ${NVCC} -M ${SRCS} > .depend 
.depend: ${SRCS} makefile 
     ${NVCC} -M ${SRCS} > .depend 

Это не похоже, чтобы сделать работу, как я просто получить ProgramTwo работает, когда я призываю ./RunAll.

Обратите внимание, что я сейчас думаю о решении, где мои две программы отделены друг от друга. Я также могу сделать основную функцию в ProgramOne функцией, которую я затем вызываю в самом начале основной функции ProgramTwo. Таким образом, я могу легко сгенерировать команду makefile для третьего из моих параметров, а именно RunAll, но тогда я не знаю, как я могу добиться первых двух.

Я бы предпочел решение, чтобы мои две программы были развязаны, но если это невозможно, не стесняйтесь говорить мне все возможные способы, чтобы я мог выполнить эту работу.

Я уже искал основную информацию о make-файлах (простые учебники) и смотрел руководство для самого make-файла, но, похоже, я не нашел решения.

Любая помощь очень ценится.

+0

Ах, о котором я не упоминал. ** Я хотел бы, чтобы они работали на одном и том же терминале один за другим. ** – Tim

+0

Я использую стандартный терминал в Ubuntu 14.04. Я, однако, понятия не имею, что это такое. – Tim

ответ

0

Эта цель ничего не работает: он просто объявляет предварительные условия, но у вас нет рецепта (рецепт является вещь, которая передается в оболочке и выполняется):

RunAll: RunProgramOne RunProgramTwo 

Если вы хотите, эта цель для запуска в программах вы должны написать рецепт, который делает это:

RunAll: RunProgramOne RunProgramTwo 
     ./RunProgramOne 
     ./RunProgramTwo 
+0

Это не работает для меня, как вызов ./RunAll в терминале дает мне 'bash: ./RunAll: Нет такого файла или каталога. Однако я забыл важную информацию в вопросе, поэтому я отредактирую это также. – Tim

+0

Вы не можете запустить 'RunAll' в качестве команды из вашей оболочки. «RunAll» - это цель make, которая живет в вашем make-файле, и только программа 'make' может обрабатывать ваш make-файл и строить цели. Вы должны ввести 'make RunAll'. – MadScientist

+0

Если вы хотите иметь возможность запускать оба из командной строки оболочки без вызова 'make', вы не можете просто использовать цель makefile (четко). Вы можете создать псевдоним оболочки, который будет создавать и запускать их оба, например 'alias RunAll = 'make RunAll'' – MadScientist

Смежные вопросы