GCC是否有通用选项可将编译输出后缀改为.obj?
GCC统一目标文件后缀为.obj的解决方案
GCC本身没有直接修改默认目标文件后缀(从.o改为.obj)的单一开关,但可以通过以下两种可靠方式实现统一输出,避免维护多份链接器文件:
1. 编译命令自动替换文件名(适用于IDE/脚本场景)
在IDE的编译命令模板中,利用文件名变量自动生成.obj后缀的输出文件,无需手动逐个指定。比如针对C源文件,编译命令可写为:
gcc -c "$<" -o "$(basename "$<" .c).obj"
如果是C++源文件,只需把.c替换为.cpp即可。这种方式无需修改GCC的默认行为,通过命令模板的变量替换就能自动匹配源文件生成对应.obj目标文件。
2. 自定义GCC Specs文件修改默认后缀
GCC的specs文件定义了编译、链接的默认规则,你可以通过修改它永久改变目标文件的默认后缀:
- 导出当前默认specs文件:
gcc -dumpspecs > my_custom.spec - 打开
my_custom.spec,找到*object_suffix:对应的行,将原有的.o替换为.obj - 编译时指定使用该自定义specs文件:
这样编译时无需额外加gcc -specs=my_custom.spec -c your_source.c-o选项,默认生成的目标文件就是.obj格式。
额外:统一CMake的输出后缀(更简便的跨工具链方案)
如果你的核心需求是让IDE和CMake的输出后缀一致,也可以直接修改CMake配置,强制CMake生成.obj文件:
# 针对C语言设置目标文件后缀 set(CMAKE_C_OUTPUT_EXTENSION .obj) # 针对C++语言设置目标文件后缀 set(CMAKE_CXX_OUTPUT_EXTENSION .obj)
配合IDE中GCC的.obj输出设置,就能彻底统一目标文件后缀,只维护一份链接器文件即可。
内容的提问来源于stack exchange,提问作者RD Florida
相关产品推荐
相关产品推荐

