gpt4 book ai didi

c - 即使我在我的 makefile 中传递 -c,make 也会自动尝试链接

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:11 25 4
gpt4 key购买 nike

我是 makefile 的新手,所以如果这是一个愚蠢的问题,我提前道歉。我还从我的 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 正在尝试编译和链接,即使我明确添加了 -c 标志。当我自己(从 bash)运行“gcc -fPIC -g -c...”时,我完全没有遇到任何问题。为什么 make 继续尝试“cc acoLibInit.o -o acolibInit”?

最佳答案

make 正在尝试构建 acoLibInit。它可能具有指定 "whatever"可以通过链接 "whatever.o" 生成的内置规则,这就是为什么你得到 cc 行的原因。

这一行:

acolibinterface: $(acolibobj).o

扩展为:

acolibinterface: acoLibInit acoGlobalDefs.o

(注意第一个依赖项中没有 .o)。这就是它尝试链接 acoLibInit 的原因。

试试这个:

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

如果您只想将 .o 文件作为该目标的依赖项。

关于c - 即使我在我的 makefile 中传递 -c,make 也会自动尝试链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com