Bootstrap

Cmake学习详细笔记(3) ——编译选项

1,常用设置及含义

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
-Wall                       Enable most warning messages.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
message-length=<number>   Limit diagnostics to <number> characters per line.  0 suppresses line-wrapping.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=return-type")
-Werror=                    Treat specified warning as error. 
-Wreturn-type               Warn whenever a function's return type defaults to "int" (C), or about inconsistent return types (C++).

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-all")
 -fstack-protector-all       Use a stack protection method for every function.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=format")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=write-strings")
-Wwrite-strings             In C++, nonzero means warn about deprecated conversion from string literals to 'char *'.  In C, similar warning, except that the
                              conversion is of course not deprecated by the ISO C standard.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=reorder")
-Wreorder                   Warn when the compiler reorders code.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=unused-variable ")
-Wunused-variable           Warn when a variable is unused.
set(MAJOR_VERSION "1")
set(MINOR_VERSION "0")
set(PATCH_VERSION "0")

2,变量
1,cmake预定义变量


```c
PROJECT_SOURCE_DIR 	工程的根目录
PROJECT_BINARY_DIR 	运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build
CMAKE_INCLUDE_PATH 	环境变量,非cmake变量
CMAKE_LIBRARY_PATH 	环境变量
CMAKE_CURRENT_SOURCE_DIR 	当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_BINARY_DIR 	target编译目录
使用ADD_SURDIRECTORY(src bin)可以更改此变量的值
SET(EXECUTABLE_OUTPUT_PATH <新路径>)并不会对此变量有影响,只是改变了最终目标文件的存储路径
CMAKE_CURRENT_LIST_FILE 	输出调用这个变量的CMakeLists.txt的完整路径
CMAKE_CURRENT_LIST_LINE 	输出这个变量所在的行
CMAKE_MODULE_PATH 	定义自己的cmake模块所在的路径
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块
EXECUTABLE_OUTPUT_PATH 	重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH 	重新定义目标链接库文件的存放位置
PROJECT_NAME 	返回通过PROJECT指令定义的项目名称
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 	用来控制IF ELSE语句的书写方式

2,系统变量

CMAKE_MAJOR_VERSION 	cmake主版本号,3.8.5中的3
CMAKE_MINOR_VERSION 	cmake次版本号,3.8.5中的8
CMAKE_PATCH_VERSION 	cmake补丁等级,如3.8.5中的5
CMAKE_SYSTEM 	系统名称
CAMKE_SYSTEM_NAME 	不包含版本的系统名
CMAKE_SYSTEM_VERSION 	系统版本
CMAKE_SYSTEM_PROCESSOR 	处理器名称
UNIX 	在所有的类UNIX平台为TRUE,包括OS X和cygwin
WIN32 	在所有的win32平台为TRUE,包括cygwin

3,开关选项

BUILD_SHARED_LIBS 	控制默认的库编译方式。如果未进行设置,使用ADD_LIBRARY时又没有指定库类型,默认编译生成的库都是静态库 (可在t3中稍加修改进行验证)
CMAKE_C_FLAGS 	设置C编译选项
CMAKE_CXX_FLAGS 	设置C++编译选项

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;