简单的CMake项⽬⼊门(三)——让cpp⽂件使⽤CMakeLists中的变量说明:本⼈使⽤的系统为 CentOS7。
我们在⼯程中,⼀套代码常常需要应对不同的环境。例如,我们的上层的逻辑不变,⽽存储底座可能发⽣变化。这时,使⽤ CMakeLists 就可以在不同需要时编译出我们想要的结果。
⽂件结构很简单:
$ tree
.
├──
└── main.cpp
CMakeLists:
cmake_minimum_required(VERSION 3.5)
project(Hello)
option(ENABLE_SWITCH "try use cmakelists option" OFF) # 注意这个变量 ENABLE_SWITCH。
if (ENABLE_SWITCH)
message("---------> Opne the ENABLE_SWITCH.")
add_definitions(-DENABLE_SWITCH) # 注意 ENABLE_SWITCH 前有个 D。
# add_compile_options(-DENABLE_SWITCH) # 也可以这样使⽤,我们项⽬中都使⽤该⽅法。
endif ()
ADD_EXECUTABLE(helloGlog main.cpp)
main.cpp:
#include<iostream>
int main(int argc,char**argv)
{
#ifdef ENABLE_SWITCH // 这个变量就是我们在 CMakeLists 中定义的。
std::cout <<"Hello world A"<< std::endl;
#endif
std::cout <<"Hello world B"<< std::endl;
return0;
}
如果我们直接编译运⾏:
mkdir build
cd build
cmake ..
make
.
/helloGlog
输出:
Hello world B
如果我们将 ENABLE_SWITCH 设为 ON:
cmake -DENABLE_SWITCH=ON ..
make
./helloGlog
输出:
cmake如何使用Hello world A
Hello world B
另外
除了在 .cpp ⽂件中使⽤:
#ifdef ENABLE_SWITCH
std::cout <<"----------------> Hello world"<< std::endl;
#endif
还可以这样写:
#if defined(ENABLE_SWITCH)
std::cout <<"================> Hello world"<< std::endl;
#endif
#ifdef 和 #if defined() 的区别在于:当你要判断单个宏是否定义时,两者都可以使⽤;但是当你要判断复杂的条件时,只能⽤ #if defined。例如:
#if defined (AAA) && defined (BBB)
...
#endif

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。