我是makefiles的新手,所以如果这是一个愚蠢的问题,我会提前道歉。我也从我的makefile中删除了大多数变量,因为它们没有正常工作(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
当我运行这个makefile时,我得到:
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)时,我根本没有遇到任何问题。为什么继续尝试“cc acoLibInit.o -o acolibInit”?
答案 0 :(得分:2)
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
个文件作为该目标的依赖项。
答案 1 :(得分:2)
$(acolibobj).o
扩展为acoLibInit acoGlobalDefs.o
。因此,你真的在说:
acolibinterface: acoLibInit acoGlobalDefs.o
只需定义acolibobj = acoLibInit.o acoGlobalDefs.o
并使用acolibinterface: $(acolibobj)
。