文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
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 为每个目标分别定义编译标志。这样做的好处是更灵活、范围更小。在我们的例子中,这能减少不必要的代码复制。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论