Skip to content

Commit

Permalink
update chapter 6
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaoweiChen committed Oct 19, 2019
1 parent e9148fe commit 52f8f10
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 15 deletions.
2 changes: 1 addition & 1 deletion content/chapter6/6.1-chinese.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**NOTE**:*此示例代码可以在 https://github.com/dev-cafe/cmake-cookbook/tree/v1.0/chapter-6/recipe-01 中找到,其中包含一个Fortran/C例子。该示例在CMake 3.10版(或更高版本)中是有效的,并且已经在GNU/Linux、macOS和Windows(使用MSYS Makefiles)上进行过测试。*

代码生成在配置时发生,例如:CMake可以检测操作系统和可用库;基于这些信息,我们可以定制构建的源代码,为库或程序的最终用户提供最大的性能。本节和下面章节中,我们将演示如何生成一个简单的源文件,该文件定义了一个函数,用于报告构建系统配置。
代码生成在配置时发生,例如:CMake可以检测操作系统和可用库;基于这些信息,我们可以定制构建的源代码。本节和下面的章节中,我们将演示如何生成一个简单源文件,该文件定义了一个函数,用于报告构建系统配置。

## 准备工作

Expand Down
2 changes: 1 addition & 1 deletion content/chapter6/6.2-chinese.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ def configure_file(input_file, output_file, vars_dict):

## 更多信息

把这个示例尽可能表达得更简单。我们可以使用`get_cmake_property(_vars VARIABLES)`来获得所有变量的列表,而不是显式地构造`vars_dict`(这感觉有点重复),并且可以遍历`_vars`的所有元素来访问它们的值:
我们可以使用`get_cmake_property(_vars VARIABLES)`来获得所有变量的列表,而不是显式地构造`vars_dict`(这感觉有点重复),并且可以遍历`_vars`的所有元素来访问它们的值:

```cmake
get_cmake_property(_vars VARIABLES)
Expand Down
13 changes: 6 additions & 7 deletions content/chapter6/6.6-chinese.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ const std::string GIT_HASH = "@GIT_HASH@";
#include <iostream>

int main() {
std::cout << "This code has been configured from version " << GIT_HASH
<< std::endl;
std::cout << "This code has been configured from version " << GIT_HASH << std::endl;
}
```

Expand All @@ -33,7 +32,7 @@ int main() {

下面演示了从Git记录版本信息的步骤:

1. CMakeLists.txt中,定义项目和支持语言:
1. 定义项目和支持语言:

```cmake
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
Expand All @@ -43,7 +42,7 @@ int main() {
set(CMAKE_CXX_STANDARD_REQUIRED ON)
```

2. 然后,使用下面的代码定义一个变量`GIT_HASH`:
2. 定义`GIT_HASH`变量:

```cmake
# in case Git is not available, we default to "unknown"
Expand All @@ -65,7 +64,7 @@ int main() {
message(STATUS "Git hash is ${GIT_HASH}")
```

3. CMakeLists.txt剩余的部分,类似于之前的示例:
3. `CMakeLists.txt`剩余的部分,类似于之前的示例:

```cmake
# generate file version.hpp based on version.hpp.in
Expand All @@ -85,7 +84,7 @@ int main() {
)
```

4. 我们可以验证输出(Hash不同):
4. 验证输出(Hash不同):

```shell
$ mkdir -p build
Expand All @@ -99,7 +98,7 @@ int main() {

## 工作原理

我们使用`find_package(Git QUIET)`来检测系统上是否有可用的Git。如果有(`GIT_FOUND``True`),运行一个Git命令:
使用`find_package(Git QUIET)`来检测系统上是否有可用的Git。如果有(`GIT_FOUND``True`),运行一个Git命令:
`${GIT_EXECUTABLE} log -1 --pretty=format:%h`。这个命令给出了当前提交Hash的简短版本。当然,这里我们可以灵活地运行Git命令。我们要求`execute_process`命令将结果放入名为`GIT_HASH`的变量中,然后删除任何尾随的空格。使用`ERROR_QUIET`,如果Git命令由于某种原因失败,我们不会停止配置。

由于Git命令可能会失败(源代码已经分发到Git存储库之外),或者Git在系统上不可用,我们希望为这个变量设置一个默认值,如下所示:
Expand Down
12 changes: 6 additions & 6 deletions content/chapter6/6.7-chinese.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ int main() {

将Git信息保存到`version.hpp`头文件在构建时需要进行以下操作:

1. 把前一个示例的CMakeLists.txt中的大部分代码移到一个单独的文件中,并将该文件命名为`git-hash.cmake`:
1. 把前一个示例的`CMakeLists.txt`中的大部分代码移到一个单独的文件中,并将该文件命名为`git-hash.cmake`:

```cmake
# in case Git is not available, we default to "unknown"
Expand All @@ -49,7 +49,7 @@ int main() {
)
```

2. 这部分在CMakeLists.txt,已经非常熟悉了:
2. `CMakeLists.txt`熟悉的部分:

```cmake
# set minimum cmake version
Expand All @@ -69,7 +69,7 @@ int main() {
)
```

3. CMakeLists.txt的剩余部分,记录了每次编译代码时的Git Hash:
3. `CMakeLists.txt`的剩余部分,记录了每次编译代码时的`Git Hash`:

```cmake
add_custom_command(
Expand Down Expand Up @@ -97,7 +97,7 @@ int main() {

## 工作原理

示例中,我们实现了在构建时执行CMake代码。为此,定义了一个自定义命令:
示例中,在构建时执行CMake代码。为此,定义了一个自定义命令:

```cmake
add_custom_command(
Expand Down Expand Up @@ -127,5 +127,5 @@ add_custom_target(

## 更多信息

我们可以改进配置,以便在记录的Git Hash外,包含其他的信息。检测构建环境是否“污染”(即是否包含未提交的更改和未跟踪的文件),或者“干净”。可以使用`git describe --abbrev=7 --long
--always --dirty --tags `检测这些信息。根据可重现性,甚至可以将Git的状态,完整输出记录到头文件中,但是我们将这些功能作为课后习题留给读者自己完成
我们可以改进配置,以便在记录的`Git Hash`,包含其他的信息。检测构建环境是否“污染”(即是否包含未提交的更改和未跟踪的文件),或者“干净”。可以使用`git describe --abbrev=7 --long
--always --dirty --tags `检测这些信息。根据可重现性,甚至可以将Git的状态,完整输出记录到头文件中,我们将这些功能作为课后习题留给读者自己完成

0 comments on commit 52f8f10

Please sign in to comment.