CMake和Cpp条件编译(一)—CMake的条件编译
在软件开发过程中,我们往往需要根据实际情况进行不同的编译,比如编译一个软件的Debug版本和Release版本,需要编译一个人软件的试用版和正式版等。在这样的情况下,条件编译就非常有用了,接来下我分为CMake的条件编译和CMake设置cpp的条件编译两部分来介绍。
1 CMake条件编译
在CMake中,我们可以通过调用message打印输出,来确定我们的选项是如何设置的。因为直接执行CMake ..输出的信息比较多,我们可以用同样的指令执行两遍来查看输出的效果。
1.1 CMake的define示例
- CMakeLists.txt 文件
cmake_minimum_required(VERSION 3.0)
project(CMakeDemo2)
if(DEFINED DEBUG_LOG)
message("DEBUG_LOG is defined")
else()
message("DEBUG_LOG is not defined")
endif()
cmake ..
的输出效果
cmake .. -DDEBUG_LOG=1
的输出效果
1.2 CMake的if示例
- CMakeLists.txt文件
cmake_minimum_required(VERSION 3.0)
project(CMakeDemo1)
option(DEBUG_LOG "Print log for debug version" ON)
if(DEBUG_LOG)
message("DEBUG_LOG is on")
else()
message("DEBUG LOG is off")
endif(DEBUG_LOG)
cmake .. -DDEBUG_LOG=ON
的输出效果
cmake .. -DDEBUG_LOG=OFF
的输出效果
1.3 CMake中的数值比较
在CMake中,我们可以通过比较数值,来选择不同的操作,比如下面这个例子。数值比较我们使用的是LESS
(小于)、EQUAL
(等于)、GREATER
(大于)
- CMakeLists.txt的示例
cmake_minimum_required(VERSION 3.0)
project(CMakeDemo3)
if(${PREV_VALUE} LESS ${CUR_VALUE})
message("PREV_VALUE < CUR_VALUE ")
elseif(${PREV_VALUE} EQUAL ${CUR_VALUE})
message("PREV_VALUE == CUR_VALUE")
elseif(${PREV_VALUE} GREATER ${CUR_VALUE})
message("PREV_VALUE > CUR_VALUE")
else()
message("PREV_VALUE unknown relation with CUR_VALUE")
endif()
cmake ..
的输出
cmake .. -DPREV_VALUE=1 -DCUR_VALUE=2
的输出(LESS)
-
cmake .. -DPREV_VALUE=2 -DCUR_VALUE=2
的输出(EQUAL) -
cmake .. -DPREV_VALUE=2 -DCUR_VALUE=1
的输出(GREATER)
1.4 CMake中的字符串比较
在CMake中,我们可以通过STRLESS
(小于)、STREQUAL
(等于)、STRGREATER
(大于)来进行字符串的比较,从而确定不同的编译选择。
- CMakeLists.txt的示例
cmake_minimum_required(VERSION 3.0)
project(CMakeDemo4)
if(${PREV_VALUE} STRLESS ${CUR_VALUE})
message("PREV_VALUE strless CUR_VALUE")
elseif(${PREV_VALUE} STREQUAL ${CUR_VALUE})
message("PREV_VALUE strequal CUR_VALUE")
elseif(${PREV_VALUE} STRGREATER ${CUR_VALUE})
message("PREV_VALUE strgreater CUR_VALUE")
else()
message("PREV_VALUE unknown CUR_VALUE")
endif()
cmake ..
的默认编译
cmake .. -DPREV_VALUE=A -DCUR_VALUE=B
的输出(STRLESS)
cmake .. -DPREV_VALUE=B -DCUR_VALUE=B
的输出结果(STREQUAL)
cmake .. -DPREV_VALUE=B -DCUR_VALUE=A
的输出结果(STRGREATER)
以上就是对CMake的条件编译的简单介绍,如果有什么遗漏或者错误的地方,欢迎大家指出。