什么时候应该在Makefile中使用-c或-o GCC选项?
When should -c or -o GCC options be used in a Makefile?
我正在使用Makefile来编译我的cpp文件和头文件。但是我不完全理解的是编译时-o和-c之间的区别。我知道- 0会创建一个目标文件,通常我们会写g++ -o compile demo.cpp编译一个程序demo.cpp。但是当编译一个有很多类的程序时,为什么要使用"g++ -c class.cpp"而不是像我们通常做的- 0。下面是一个示例Makefile。非常感谢你的帮助!
all:compile
compile: demo.cpp class.o
g++ -o compile demo.cpp class.o
class.o: class.h class.cpp
g++ -c class.cpp
"…为什么我们要用
g++ -c class.cpp
…"
来自GCC的文档(强调我的):
- c
编译或组装源文件,但不要链接。链接阶段还没有完成。最终的输出是每个源文件的目标文件的形式。
默认情况下,源文件的目标文件名是通过替换后缀' .c ', '来生成的。我','。S '等,用'。o '。不需要编译或汇编的无法识别的输入文件将被忽略。
和
文件em>
将输出放在文件文件中。这适用于产生的任何类型的输出,无论是可执行文件,目标文件,汇编文件还是预处理的C代码。如果未指定-o,则默认将可执行文件放入a.o out中,即source的目标文件。source中的后缀。它的汇编文件在源代码中。S,在source.suffix中预编译的头文件。gch,以及标准输出上的所有预处理C源代码。
-c
用于确保class.o
被编译为一个目标文件,该文件可以从compile
目标的后续应用规则中链接。
由于所需的compile
目标是一个可执行文件,因此使用-o
来确保链接完成。
相关文章:
- NodeJS:node-gyp 编译与等效的 gcc -lm 选项
- 交叉编译:特殊的交叉编译器还是只是带有选项 -march 的 gcc?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 如何使用 GCC 编译指示启用选项 '-Werror'?
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- GCC-7:错误:无法识别的命令行选项"-M64"
- 整个项目的GCC选项摘要-ftime-报告
- STD :: ASYNC带有GCC 7.2需要Pthread Link选项
- 带有调试选项的 GCC 编译阶段
- 是否有GCC选项来警告编写"this-field"而不是"this->field"?
- gcc:错误:在 MacOSX 上构建 openjdk9 时'-mstack-alignment=16'无法识别的命令行选项
- 为什么在不同的计算机体系结构上,相同的GCC的编译选项会有所不同
- NetBeans 8.0 中的 GCC 选项
- rddynamic gcc选项的影响/缺点
- 是否有用于打印源文件直接包含的标题的 GCC 选项
- GCC选项:警告没有返回语句的非void函数
- 什么时候应该在Makefile中使用-c或-o GCC选项?
- GCC '-g' 选项有什么作用?
- 什么是微软等效的GCC选项init_priority
- 由于 gcc -M 选项,覆盖性扫描会跳过所有命令,并且不扫描任何内容