文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
15.4 复制编译标志
现在,让我们尝试调整编译器标志来进行引用构建。
定义编译器标志
目前为止,我们还没有定义任何自定义编译器标志,参考 Autotools 构建中,代码是使用的编译标志有 -g -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -O2
,这些标示都是 GNU C 编译器可以识别的。
我们的第一个定义如下:
if(CMAKE_C_COMPILER_ID MATCHES GNU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -O2") endif()
并且,在生成源文件之前,我们将把这段代码放在 src/CMakeLists.txt
的顶部(因为 pathdef.c
有使用到 ${CMAKE_C_FLAGS}
):
# <- we will define flags right here include(autogenerate.cmake) generate_config_h() generate_pathdef_c() generate_osdef_h()
编译器标志定义的一个小修改是将 -O2
定义为 Release 配置标志,并关闭 Debug 的配置:
if(CMAKE_C_COMPILER_ID MATCHES GNU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1") set(CMAKE_C_FLAGS_RELEASE "-O2") set(CMAKE_C_FLAGS_DEBUG "-O0") endif()
请使用 make VERBOSE=1
验证,构建是否使用了预期的标志。
编译器标志的作用域
在这个特殊的示例项目中,所有源文件都使用相同的编译标志。对于其他项目,我们可能不希望像上面那样全局定义编译标志,而是使用 target_compile_options
为每个目标分别定义编译标志。这样做的好处是更灵活、范围更小。在我们的例子中,这能减少不必要的代码复制。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论