一 内容
- 在 CMake Tutorial1_1 最简单的例子 基础上修改。
- 主要说明 CMake如何设置C++语言标准。
- 修改CMakeLists.txt
# 设置CMake最低版本 cmake_minimum_required(VERSION 3.16) # 设置项目名称及版本 project(Tutorial VERSION 1.0) # 设置语言标准,此处为C++11 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) # 生成可执行文件 add_executable(Tutorial main.cc)
- 从 CXX_STANDARD 可知,当前CMAKE_CXX_STANDARD可设置的值有98,11,14,17,20,23。
- 修改 main.cc
int main() { auto f = [](){ std::cout << "C++11, auto & lambda express feature." << std::endl; }; f(); return 0; }
二 构建
- 与Tutorial1_1相同,创建并进入构建目录build
- build&run
lee@leedeMacBook-Pro build % cmake .. -- The C compiler identification is AppleClang 12.0.0.12000032 -- The CXX compiler identification is AppleClang 12.0.0.12000032 -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /Users/lee/research/cmake_learn/cmake_tutorial/step1_3/build lee@leedeMacBook-Pro build % cmake --build . -- Configuring done -- Generating done -- Build files have been written to: /Users/lee/research/cmake_learn/cmake_tutorial/step1_3/build Scanning dependencies of target Tutorial [ 50%] Building CXX object CMakeFiles/Tutorial.dir/main.cc.o [100%] Linking CXX executable Tutorial [100%] Built target Tutorial lee@leedeMacBook-Pro build % ./Tutorial C++11, auto & lambda express feature.
- 如果将标准设置为C++98呢?有如下报错:
lee@leedeMacBook-Pro build % cmake --build . -- Configuring done -- Generating done -- Build files have been written to: /Users/lee/research/cmake_learn/cmake_tutorial/step1_3/build [ 50%] Building CXX object CMakeFiles/Tutorial.dir/main.cc.o /Users/lee/research/cmake_learn/cmake_tutorial/step1_3/main.cc:4:3: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions] auto f = [](){ ^ /Users/lee/research/cmake_learn/cmake_tutorial/step1_3/main.cc:4:12: error: expected expression auto f = [](){ ^ 1 warning and 1 error generated. make[2]: *** [CMakeFiles/Tutorial.dir/main.cc.o] Error 1 make[1]: *** [CMakeFiles/Tutorial.dir/all] Error 2 make: *** [all] Error 2
三 Github
- 代码已上传Github