繁体   English   中英

gcc无效的命令行选项

[英]gcc invalid command-line options

在gcc中使用此Makefile进行编译时,出现了错误

cannot specify -o with -c, -S or -E with multiple files"

现在,我想这与尝试两次编译同一文件有关,但我不知道如何做。

assembler : main.o assembler.o utils.o
    gcc -g -ansi -Wall -pedantic -lm main.o assembler.o utils.o -o assembler
main.o : main.c assembler.h utils.h
    gcc -c -ansi -Wall -pedantic -lm main.c assembler.h utils.h -o main.o
assembler.o : assembler.c
    gcc -c -ansi -Wall -pedantic -lm assembler.c -o assembler.o
utils.o : utils.c structs.h
    gcc -c -ansi -Wall -pedantic -lm utils.c structs.h -o utils.o

文件包括如下:

structs.h is included in utils.c,
utils.c is included in utils.h,
utils.h is included in assembler.c,
assembler.c is included in assembler.h,
assembler.h is included in main.c.

(:不知道为什么,这让我以代码形成的方式来做...

您的makefile错误地将所有依赖项添加到了compile命令,而不仅仅是第一个依赖项。 结果是您试图将头文件编译为翻译单元,这是不合适的。

link命令中添加所有依赖关系是正确的,该命令将多个目标文件组合成一个可执行文件。 但是,如错误消息所示,使用-c选项创建目标文件时,无法提供多个源文件。

因此,编译配方通常将使用$< (第一个依赖项),而链接配方将使用$^ (所有依赖项)。 请参见制造手册的“ 自动变量”一章

您可能需要此makefile(只需从gcc命令中删除.h文件):

assembler : main.o assembler.o utils.o
    gcc -g -ansi -Wall -pedantic -lm main.o assembler.o utils.o -o assembler

main.o : main.c assembler.h utils.h
    gcc -c -ansi -Wall -pedantic main.c -o main.o

assembler.o : assembler.c
    gcc -c -ansi -Wall -pedantic assembler.c -o assembler.o

utils.o : utils.c structs.h
    gcc -c -ansi -Wall -pedantic utils.c -o utils.o

也许更好的方法:

assembler:: main.o assembler.o utils.o
    gcc -o $@ main.o assembler.o utils.o -lm
.c.o:
    gcc -c  -g -ansi -Wall -pedantic $*.c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM