目前,我正在尝试使用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但是,我确实将包含主文件的文件添加到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如有任何协助或见解,将不胜感激:)
发布于 2017-06-19 07:21:53
要回答眼前的问题,这条规则是错误的:
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.ogcc的-o选项设置输出文件,因此,您将尝试从所有其他对象文件链接一个名为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规则的目标通常应该是由该规则创建的文件。在规则中,您有可用的自动变量:$@用于目标,$<或$^用于第一个resp。创建输出所需的所有先决条件(冒号后面的文件)。
GNU还支持模式规则,使用%作为模式匹配的通配符,因此根本不需要一遍又一遍地编写相同的规则。
最后,不属于已创建文件名称的目标应该声明为.PHONY。有关详细信息,请阅读GNU制作手册。
建议的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 cleanhttps://stackoverflow.com/questions/44619642
复制相似问题