2016-02-15 2 views
-2

У меня есть программа main.c и один заголовок, который называется functions.h. У Main есть необходимость в аргументах командной строки, и я не знаю, как создать make-файл, чтобы он принимал аргументы командной строки.Makefile с аргументами командной строки

main.c: 
#include <functions.h> 
int main(char agrv[], int argc){.....} 

makefile: 
p1: main.o insertNode.o functions.h 
    gcc -c main.o insertNode.o -p1 
main.o: main.c 
    gcc -c main.c 
insertNode.o: insertNode.c 
    gcc -c insertNode.c 

мне нужно набрать в командной строке «p1 inputfile.txt OutputFile.txt», и я не могу понять его

+0

make-файлы не имеют на нем никаких признаков. –

+2

Вы передаете эти аргументы в скомпилированную программу, а не 'make'. Но похоже, что ваш 'Makefile' не создает программу (это просто компиляция источников в объектные файлы (' * .o'), но она не связывает их с программой). Предположительно, вы имели в виду, что правило 'p1' должно быть' gcc -o p1 main.o insertNode.o'. – Cornstalks

+0

Вы хотите, чтобы Makr выполнил * 'p1'? – Beta

ответ

1

следующий Makefile должен выполнять, как вы хотели.

OBJS := main.o insertNode.o 
SRCS := main.c insertNode.c 
HDRS := functions.h 

.PHONY: all 
all: p1 $(SRCS) 

%.o:%.c 
<tab>gcc -c $(CFLAGS) $< -o [email protected] -I. 

p1: #(OBJS) 
<tab>gcc $(OBJS) -o [email protected] $(LFLAGS) 

передать аргументы командной строки в Makefile, используйте

make -f makefile -Dparm=value 

Тогда внутри Makefile, то parm можно сослаться: $(parm) и его содержание будет value

в тип в

p1 inputfile.txt outputfile.txt 

май Файл n.c должен иметь что-то похожее на:

... 

int main(int argc, char* argv[]) 
{ 

    if(3 != argc) 
    { // then invalid number of parameters 
     fprintf(stderr, "USAGE: %s <inputFileName> <outputFileName>\n". argv[0]); 
     exit(EXIT_FAILURE) 
    } 

    // implied else, correct number of command line parameters 

    // the input file name is pointed to by `argv[1]` 
    // the output file name is pointed to by `argv[2]`