Cmake中文教程附完整代码(一)【2022.05.10】

第 1 步:基本起点

最基本的项目是从源代码文件构建的可执行文件。对于简单的项目,只需要一个三行CMakeLists.txt文件。这将是我们教程的起点。在Step1目录中创建一个 CMakeLists.txt文件,如下所示:

*CMakeLists.txt* 
cmake_minimum_required(VERSION 3.10)

# set the project name
project(Tutorial)

# add the executable
add_executable(Tutorial tutorial.cxx)

CMakeLists.txt请注意,此示例在文件中使用小写命令。CMake 支持大写、小写和大小写混合命令。Step1目录下的tutorial.cxx提供了的源代码,用于计算数字的平方根。

构建并运行

这就是我们所需要的——我们现在可以构建和运行我们的项目了!首先,运行cmake可执行文件或 cmake-gui配置项目,然后使用您选择的构建工具构建它。

例如,从命令行我们可以导航到 Help/guide/tutorialCMake 源代码树的目录并创建一个构建目录:

mkdir Step1_build

接下来,导航到构建目录并运行 CMake 以配置项目并生成本机构建系统:

cd Step1_build
cmake ../Step1

然后调用该构建系统来实际编译/链接项目:

cmake --build .

Tutorial最后,尝试使用这些命令新建的:

Tutorial 4294967296
Tutorial 10
Tutorial

添加版本号和配置的头文件

我们将添加的第一个功能是为我们的可执行文件和项目提供版本号。虽然我们可以只在源代码中执行此操作,但使用 CMakeLists.txt提供了更大的灵活性。

首先,修改CMakeLists.txt文件以使用project()命令来设置项目名称和版本号。

*CMakeLists.txt *
cmake_minimum_required(VERSION 3.10)

# set the project name and version
project(Tutorial VERSION 1.0)

然后,配置一个头文件将版本号传递给源代码:

*CMakeLists.txt* 
configure_file(TutorialConfig.h.in TutorialConfig.h)

由于配置的文件将被写入目录二叉树,我们必须将该目录添加到路径列表中以搜索包含文件。将以下行添加到CMakeLists.txt文件末尾:

*CMakeLists.txt* 
target_include_directories(Tutorial PUBLIC
   "${PROJECT_BINARY_DIR}"
   )

使用您喜欢的编辑器,TutorialConfig.h.in在源目录中创建以下内容:

*TutorialConfig.h.in* 
// the configured options and settings for Tutorial
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

当 CMake 配置此头文件时, @TutorialVERSIONMAJOR@和@TutorialVERSIONMINOR@的值将被替换。

接下来修改tutorial.cxx以包含配置的头文件, TutorialConfig.h.

tutorial.cxx最后,让我们通过如下更新打印出可执行文件名和版本号 :

*tutorial.cxx*
if (argc < 2) {
// report version
std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
  << Tutorial_VERSION_MINOR << std::endl;
std::cout << "Usage: " << argv[0] << " number" << std::endl;
return 1;
}

指定 C++ 标准

接下来让我们通过替换tutorial.cxx中的atof为 std::stodin为我们的项目添加一些 C++11 功能。同时,删除 #include

*tutorial.cxx*
  const double inputValue = std::stod(argv[1]);

我们需要在 CMake 代码中明确声明它应该使用正确的标志。在 CMake 中启用对特定 C++ 标准的支持的最简单方法是使用CMAKE_CXX_STANDARD变量。对于本教程,设置CMakeLists.txt文件中的变量CMAKE_CXX_STANDARD为11和CMAKE_CXX_STANDARDREQUIRED 为True. 确保将CMAKE_CXX_STANDARD的声明添加到调用addexecutable上来。

*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)

重建

让我们再次构建我们的项目。我们已经创建了一个构建目录并运行了 CMake,所以我们可以跳到构建步骤:

cd Step1_build
cmake --build .

现在我们可以尝试使用Tutorial与以前相同的命令来使用新构建的:

Tutorial 4294967296
Tutorial 10
Tutorial

在运行不带任何参数的可执行文件时,检查现在是否报告了版本号。

附完整代码:

1.tutorial.cpp

#include
#include
#include
#include"TutorialConfig.h"

int main(int argc, char * argv[])
{
	//std::cout << argc << std::endl;

	if (argc < 2) {
		// report version
		std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "." << Tutorial_VERSION_MINOR << std::endl;
		std::cout << "Usage: " << argv[0] << " number" << std::endl;
		system("pause");
		return 1;
	}
	else {
		const double d = std::stod(argv[1]);
		//double d;
		std::cout << "请输入一个实数:";
		//std::cin >> d;
		std::cout << std::endl;
		std::cout << d << "的平方根是:" << sqrt(d) << std::endl;
		std::cout << std::endl;
		return 0;
	}
}

2. CmakeLists.txt

cmake_minimum_required(VERSION 3.20)

project(Tutorial VERSION 1.0)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

configure_file(${PROJECT_SOURCE_DIR}/TutorialConfig.h.in ${PROJECT_SOURCE_DIR}/TutorialConfig.h)

add_executable( Tutorial tutorial.cpp)

target_include_directories(Tutorial PUBLIC
   "${PROJECT_SOURCE_DIR}"
   )

3. TutorialConfig.h.in

#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

你可能感兴趣的:(Cmake,c++,开发语言)