gpt4 book ai didi

c - c 程序的 makefile(在 knoppix 上)

转载 作者:太空宇宙 更新时间:2023-11-04 12:26:09 29 4
gpt4 key购买 nike

我目前正在尝试使用 makefile 用 c 代码编译一个程序,该程序在 visual studio 的 Windows 上编译得很好,我当然打算让它在我的类环境中工作(我们使用 knoppix)

我使用指南创建了一个 makefile,这是输出:

knoppix@Microknoppix:~/Desktop/projfinal$ make
gcc -c main.c
make: Warning: File `q1.c' has modification time 8.2e+03 s in the future
gcc -c q1.c
gcc -c q2.c
gcc -c q3.c
gcc -c q4.c
gcc -c q5.c
gcc -c q6.c
gcc -c q7.c
gcc -o main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o
/usr/lib/gcc/i486-linux-gnu/4.7/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [runProject] Error 1

但是我确实将包含 main 的文件添加到 makefile 中进行编译,这是我的 makefile:

runProject: main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o
gcc -o main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o

main.o: main.c projectHeader.h
gcc -c main.c

q1.o: q1.c projectHeader.h
gcc -c q1.c

q2.o: q2.c projectHeader.h
gcc -c q2.c

q3.o: q3.c projectHeader.h
gcc -c q3.c

q4.o: q4.c projectHeader.h
gcc -c q4.c

q5.o: q5.c projectHeader.h
gcc -c q5.c

q6.o: q6.c projectHeader.h
gcc -c q6.c

q7.o: q7.c projectHeader.h
gcc -c q7.c

clean:
rm runProject main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o

任何帮助或见解将不胜感激:)

最佳答案

回答眼前的问题,这个规则是错误的:

runProject: main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o
gcc -o main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o

-o gcc 的选项设置输出文件,因此不用链接 main.o在这里,您试图链接一个名为 main.o 的可执行文件来自所有其他目标文件。其他目标文件均不包含 main() ,这解释了您遇到的链接器错误。一个快速的解决办法是:

runProject: main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o
gcc -o runProject main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o

这将创建名为 runProject 的可执行文件.


不过还有很多需要改进的地方。 make 规则的目标 通常应该是由该规则创建的文件。在规则内,您有可用的自动变量:$@对于目标和 $<$^对于第一个响应。所有先决条件(冒号后的文件,需要创建输出)。

GNU make 还支持模式规则,使用 %作为模式匹配的通配符,因此完全没有必要一遍又一遍地编写相同的规则。

最后,不是创建文件名称的目标应该被声明为.PHONY .阅读 GNU make manual了解详情。

建议的 Makefile:

all: runProject

runProject: main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o
gcc -o$@ $^

%.o: %.c projectHeader.h
gcc -c -o$@ $<

clean:
rm -f runProject main.o q1.o q2.o q3.o q4.o q5.o q6.o q7.o

.PHONY: all clean

关于c - c 程序的 makefile(在 knoppix 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44619642/

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