CMake设置编译参数

1. 编译参数

项目中的CMake编译参数一直参照Muduo进行设置.

Muduo的CMakeLists.txt中,MAKE_CXX_FLAGS设置较为清晰明了,因此一直在项目中沿用.

 1 set(CXX_FLAGS
 2         -g
 3         # -DVALGRIND
 4         -DCHECK_PTHREAD_RETURN_VALUE
 5         -D_FILE_OFFSET_BITS=64
 6         -Wall
 7         -Wextra
 8         -Werror
 9         -Wconversion
10         -Wno-unused-parameter
11         -Wold-style-cast
12         -Woverloaded-virtual
13         -Wpointer-arith
14         -Wshadow
15         -Wwrite-strings
16         -march=native
17         # -MMD
18         -rdynamic
19         )
20 
21 string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE)
22 CMAKE_CXX_FLAGS
23 #string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CXX_FLAGS}")
24 string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CXX_FLAGS}")

需要注意的是,以上编译参数均是针对GCC。

如果使用Clang编译器,需要自行进行替换。

2. 编译标志解释

  1. -g

    • 含义:生成调试信息。

    • 作用:使编译器生成调试信息,以便使用调试器(如gdb)进行调试。

  2. -DVALGRIND(已注释):

    • 含义:定义宏VALGRIND

    • 作用:通常用于启用与Valgrind相关的代码部分。由于被注释掉了,所以当前没有效果。

  3. -DCHECK_PTHREAD_RETURN_VALUE

    • 含义:定义宏CHECK_PTHREAD_RETURN_VALUE

    • 作用:通常用于启用与检查pthread函数返回值相关的代码部分。

  4. -D_FILE_OFFSET_BITS=64

    • 含义:定义宏_FILE_OFFSET_BITS为64。

    • 作用:使文件操作使用64位文件偏移量,以支持大文件。

  5. -Wall

    • 含义:启用所有常见的警告。

    • 作用:使编译器生成所有常见的警告信息,帮助发现潜在的问题。

  6. -Wextra

    • 含义:启用额外的警告。

    • 作用:使编译器生成更多的警告信息,进一步帮助发现潜在的问题。

  7. -Werror

    • 含义:将所有警告视为错误。

    • 作用:使编译器在遇到警告时停止编译,强制开发者修复所有警告。

  8. -Wconversion

    • 含义:启用类型转换警告。

    • 作用:使编译器生成类型转换相关的警告,帮助发现潜在的类型转换问题。

  9. -Wno-unused-parameter

    • 含义:禁用未使用参数的警告。

    • 作用:使编译器不生成未使用参数的警告,通常用于函数参数未使用的情况。

  10. -Wold-style-cast

    • 含义:启用旧式类型转换警告。

    • 作用:使编译器生成旧式类型转换(如C风格的类型转换)相关的警告,鼓励使用C++风格的类型转换(如static_castdynamic_cast等)。

  11. -Woverloaded-virtual

    • 含义:启用重载虚函数的警告。

    • 作用:使编译器生成重载虚函数相关的警告,帮助发现潜在的虚函数重载问题。

  12. -Wpointer-arith

    • 含义:启用指针算术警告。

    • 作用:使编译器生成指针算术相关的警告,帮助发现潜在的指针算术问题。

  13. -Wshadow

    • 含义:启用变量遮蔽警告。

    • 作用:使编译器生成变量遮蔽(即局部变量遮蔽了全局变量或外层作用域的变量)相关的警告,帮助发现潜在的变量遮蔽问题。

  14. -Wwrite-strings

    • 含义:启用字符串常量转换警告。

    • 作用:使编译器生成字符串常量转换为char*相关的警告,鼓励使用const char*

  15. -march=native

    • 含义:生成针对本地机器架构优化的代码。

    • 作用:使编译器生成针对当前机器架构优化的代码,以提高性能。

  16. -rdynamic

    • 含义:将所有符号添加到动态符号表中。

    • 作用:使编译器将所有符号添加到动态符号表中,通常用于调试和动态链接。

 

> PS:
> 如果您觉得我的文章对您有帮助,请关注我的[个人博客网站](https://www.2tuan.work)
> 本文同步发布于个人博客网站,[《C++项目中CMake推荐编译参数设置》](https://www.2tuan.work/archives/CMake-recommended-compilation-parameter-settings-in-C%2B%2B-projects)。

 

posted @ 2018-07-17 13:28  从此寂静无声  阅读(38013)  评论(0编辑  收藏  举报