前言html
cmake支持多种不一样方式设置编译器标志:ui
1.使用 target_compile_definitions()设置编译器标志htm
2. 使用CMAKE_C_FLAGS和CMAKE_CXX_FLAGS设置编译标志blog
一, 目录结构作用域
├── CMakeLists.txt
├── main.cppget
* link:CMakeLists.txt[] - Contains the CMake commands you wish to run
* link:main.cpp[] - The source file with main编译器
二,cmake脚本it
cmake_minimum_required(VERSION 3.5)io
# 设置默认C++编译标志
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEX2" CACHE STRING "Set C++ Compiler Flags" FORCE)编译
project (compile_flags)
add_executable(cmake_examples_compile_flags main.cpp)
# 使用target_compile_definitions设置编译标志
target_compile_definitions(cmake_examples_compile_flags
PRIVATE EX3
)
三,扩展分析
现代cmake(modern cmake)推荐使用target_compile_definitions设置C++编译标志。
由于target_compile_definitions可以设置编译标志的做用域,关键字INTERFACE,PUBLIC和PRIVATE用来指定其后参数的做用域。
PRIVATE 和 PUBLIC 项将产生 <target> 的 COMPILE_DEFINITIONS 属性。PUBLIC 和 INTERFACE 项将产生 <target> 的INTERFACE_COMPILE_DEFINITIONS 属性。
而若是设置了CMAKE_CXX_FLAGS或CMAKE_C_FLAGS标志将使得当前目录以及子目录下全部的编译标志都为该标志。
下面这篇文章还包含一些其余编译命令。