CMake使用教程一:简单CMake文件制作
1. 代码
tutorial.cpp
#include <iostream> #include <cmath> #include <string> #include "TutorialConfig.h" using namespace std; int main(int argc, char* argv[]) { cout << "This is a simple tutorial of camke!" << endl; if (argc < 2) { // report version cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "." << Tutorial_VERSION_MINOR << endl; cout << "Usage: " << argv[0] << " number" << endl; return 1; } // convert input to double const double inputValue = stod(argv[1]); // calculate square root const double outputValue = sqrt(inputValue); cout << "The square root of " << inputValue << " is " << outputValue << endl; return 0; }
TutorialConfig.h.in通过CMake设置与程序交互的部分:
// the configured options and settings for Tutorial #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@ #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
2. CMakeLists.txt
cmake_minimum_required(VERSION 3.10) # set the project name and version project(Tutorial VERSION 1.0) # specify the C++ standard set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED true) # set major version number set(Tutorial_VERSION_MAJOR 1) # set minor version nubmer set(Tutorial_VERSION_MINOR 0) # copy a file to another location and modify its contents configure_file(TutorialConfig.h.in TutorialConfig.h) # Add include directories to the build. #include_directories("${PROJECT_BINARY_DIR}") # add the executable add_executable(Tutorial tutorial.cpp) # add include directories to a target. target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")
3. CMakeLists.txt 解析
3.1 设置版本号的两种方式
- project()中的一个可以用于指定主版本及次版本,主次版本以.区分
- 通过set()的方式设置变量的值,依次来设置版本号,此方式更常用
3.1.1 生成用于C++的头文件
configure_file()用于将一个文件输出指定的文件,并将文件中固定格式的内容进行替换为指定的内容。被替换的格式是@VAR@ 或 ${VAR}
3.1.1 指定头文件包含目录
- include_directories()此函数指定的头文件包含目录是针对这个构建的
- target_include_directories()指定的头文件包含目录则是针对某个目标的,因此需要在目标之后使用,否则会报出如下错误: CMake Error at CMakeLists.txt:25 (target_include_directories): Cannot specify include directories for target "Tutorial" which is not built by this project.
3.2 设置 C++ 版本
- CMAKE_CXX_STANDARD表明编译使用到的C++版本
- CMAKE_CXX_STANDARD_REQUIRED表明CMAKE_CXX_STANDARD是否为必须
4. 参考
下一篇:
Java自带的MD5加密算法