make автоматически пытается связать, даже когда я передаю -c в моем make-файле - PullRequest
1 голос
/ 21 июля 2011

Я новичок в makefiles, поэтому заранее прошу прощения, если это глупый вопрос.Также я удалил большинство переменных из моего make-файла, потому что они не работали должным образом (gnu make говорит мне, что $ (myvar) должен быть полностью заменен значением myvar, однако вывод make показал, что этого не происходит),поэтому я извиняюсь за уродство и более 80 строк символов.

acolibobj = acoLibInit acoGlobalDefs
acolibinterface: $(acolibobj).o
acoLibInit.o:
    gcc -fPIC -g -c -Wall -I/usr/include/dc1394 -o acoLibinit.o acoCommands/acoLibInterface/acoLibInit.c
acoGlobalDefs.o:
    gcc -fPIC -g -c -Wall -I/usr/include/dc1394 -o acoGlobalDefs.o acoCommands/acoLibInterface/acoGlobalDefs.c

Когда я запускаю этот make-файл, я получаю:

gcc -fPIC -g -c -Wall -I/usr/include/dc1394 -o acoLibinit.o acoCommands/acoLibInterface/acoLibInit.c
cc   acoLibInit.o   -o acoLibInit
gcc: acoLibInit.o: No such file or directory
gcc: no input files
make: *** [acoLibInit] Error 1

Насколько я могу судить, происходитчто make пытается скомпилировать ссылку AND, хотя я явно добавил флаг -c.Когда я сам запускаю "gcc -fPIC -g -c ..." (из bash), у меня вообще не возникает никаких проблем.Почему make пытается попробовать "cc acoLibInit.o -o acolibInit"?

Ответы [ 2 ]

2 голосов
/ 21 июля 2011

$(acolibobj).o расширяется до acoLibInit acoGlobalDefs.o.Таким образом, вы действительно говорите:

acolibinterface: acoLibInit acoGlobalDefs.o

Просто укажите acolibobj = acoLibInit.o acoGlobalDefs.o и используйте acolibinterface: $(acolibobj).

2 голосов
/ 21 июля 2011

make пытается построить acoLibInit. Вероятно, в нем есть встроенное правило, определяющее "whatever" can be produced by linking "whatever.o", поэтому вы получаете эту строку cc.

Эта строка:

acolibinterface: $(acolibobj).o

расширяется до:

acolibinterface: acoLibInit acoGlobalDefs.o

(обратите внимание на отсутствие .o на первой зависимости). Вот почему он пытается связать acoLibInit.

Попробуйте это:

acolibinterface: $(addsuffix .o,$(acolibobj))

если вы хотите, чтобы в качестве зависимостей для этой цели использовались только файлы .o.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...