Skip to content

Commit

Permalink
proofread chapter 13
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaoweiChen committed Sep 25, 2019
1 parent 42df7c0 commit dace126
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 40 deletions.
2 changes: 1 addition & 1 deletion SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
* [12.2 使用Sphinx构建文档](content/chapter12/12.2-chinese.md)
* [12.3 结合Doxygen和Sphinx](content/chapter12/12.3-chinese.md)
* [第13章 选择生成器和交叉编译](content/chapter13/13.0-chinese.md)
- [13.1 使用Visual Studio 2017构建CMake项目](content/chapter13/13.1-chinese.md)
- [13.1 使用CMake构建Visual Studio 2017项目](content/chapter13/13.1-chinese.md)
- [13.2 交叉编译hello world示例](content/chapter13/13.2-chinese.md)
- [13.3 使用OpenMP并行化交叉编译Windows二进制文件](content/chapter13/13.3-chinese.md)
* [第14章 测试指示面板](content/chapter14/14.0-chinese.md)
Expand Down
8 changes: 4 additions & 4 deletions content/chapter13/13.0-chinese.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@
* 交叉编译hello world示例
* 使用OpenMP并行化交叉编译Windows二进制文件

CMake本身不构建可执行程序和库。不过,CMake配置一个项目,并生成构建工具或框架用于构建项目的文件。在GNU/Linux和macOS上,CMake通常生成Unix Makefile,也存在一些替代方式。在Windows上,这些文件通常是Visual Studio项目文件或MinGW或MSYS Makefile。CMake包括本地构建工具或集成开发环境(IDE)的生成器。可以通过以下链接阅读更多关于它们的信息:https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html
CMake本身不构建可执行程序和库。不过,CMake配置一个项目,并生成构建工具或框架用于构建项目的文件。在GNU/Linux和macOS上,CMake通常生成Unix Makefile(也存在替代方式)。在Windows上,通常生成Visual Studio项目文件或MinGW或MSYS Makefile。CMake包括本地构建工具或集成开发环境(IDE)的生成器。可以通过以下链接阅读更多关于它们的信息:https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html

可以使用`cmake -G`的方式来选择生成器:

```shell
$ cmake -G "Visual Studio 15 2017"
```

每个平台上并不是所有的生成器都可用,而且CMake在运行时获取平台信息。要查看当前平台上所有可用生成器的列表,请键入以下命令:
不是每个平台上所有的生成器都可用,而且CMake在运行时获取平台信息。要查看当前平台上所有可用生成器的列表,请键入以下命令:

```shell
$ cmake -G
```

在本章中,我们不会使用所有可用的生成器,但是本书中的大多数示例都使用了Unix Makefile、MSYS Makefile、Ninja和Visual Studio 15 2017生成器进行了测试
在本章中,我们不会使用所有生成器,但是本书中的大多数示例都使用了Unix Makefile、MSYS Makefile、Ninja和Visual Studio 15 2017进行了测试

在本章中,我们将重点讨论Windows平台上的开发。我们将演示如何使用Visual Studio 15 2017直接构建CMake项目,而不使用命令行。还会讨论如何在Linux或macOS系统上,交叉编译Windows的可执行文件。
我们将重点讨论Windows平台上的开发,将演示不使用命令行,如何使用Visual Studio 15 2017直接构建CMake项目。还会讨论如何在Linux或macOS系统上,交叉编译Windows的可执行文件。
30 changes: 15 additions & 15 deletions content/chapter13/13.1-chinese.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
# 13.1 使用Visual Studio 2017构建CMake项目
# 13.1 使用CMake构建Visual Studio 2017项目

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

虽然,早期版本的Visual Studio要求开发人员在不同的Windows版本中编辑源代码并运行CMake命令,但Visual Studio 2017引入了对CMake项目的内置支持( https://aka.ms/cmake ),它允许在同一个IDE中发生整个编码、配置、构建和测试工作流。本示例中,我们将测试这个方法,并直接使用Visual Studio 2017构建一个简单的“hello world”CMake示例项目,而不需要使用命令行
早期版本的Visual Studio要求开发人员在不同的Windows版本中编辑源代码并运行CMake命令,但Visual Studio 2017引入了对CMake项目的内置支持( https://aka.ms/cmake ),它允许在同一个IDE中发生整个编码、配置、构建和测试工作流。本示例中,不需要使用命令行,我们将直接使用Visual Studio 2017构建一个简单的“hello world”CMake示例项目。

## 准备工作

首先,我们使用Windows平台,下载并安装Visual Studio Community 2017 (https://www.visualstudio.com/downloads/ )。在撰写本文时,这个版本是免费的,有30天的试用期。我们将遵循的视频中的步骤:https://www.youtube.com/watch?v=_lKxJjV8r3Y
首先,下载并安装Visual Studio Community 2017 (https://www.visualstudio.com/downloads/ )。在撰写本文时,这个版本是免费的,有30天的试用期。我们将遵循的视频中的步骤:https://www.youtube.com/watch?v=_lKxJjV8r3Y

运行安装程序时,确保在左侧面板上选择Desktop development with C++,并在右侧的Summary面板上选择用于CMake的Visual C++工具:
运行安装程序时,在左侧面板上选择`Desktop development with C++`,并在右侧的Summary面板上选择用于CMake的Visual C++工具:

![](../../images/chapter13/13-1.png)

在Visual Studio 2017 15.4中,还可以为Linux平台进行构建。为此,在其他工具集中选择`Linux development with C++`:
Visual Studio 2017 15.4中,还可以为Linux平台进行构建。为此,在工具集中选择`Linux development with C++`:

![](../../images/chapter13/13-2.png)

选择此选项后,只要配置了对Linux服务器的访问权限,就可以从Visual Studio中同时对Windows和Linux机器进行构建。然而,我们将不在本章中演示这种方法
选择后,只要配置Linux服务器的访问权限,就可以从Visual Studio中同时对Windows和Linux机器进行构建。我们不在本章中演示这种方法

在这个示例中,我们将在Windows上构建一个Windows二进制文件,我们的目标是配置和构建以下示例代码(`hello-world.cpp`):
这个示例中,我们将在Windows上构建一个二进制文件,我们的目标是配置和构建以下示例代码(`hello-world.cpp`):

```c++
#include <cstdlib>
Expand All @@ -36,9 +36,9 @@ int main() {

创建相应的源码:

1. 创建一个目录,并将hello-world.cpp放在新创建的目录中
1. 创建一个目录,并将`hello-world.cpp`放在新目录中

2. 在这个目录中,创建一个CMakeLists.txt文件,其内容为:
2. 目录中,创建一个CMakeLists.txt文件,其内容为:

```cmake
# set minimum cmake version
Expand Down Expand Up @@ -76,14 +76,14 @@ int main() {
)
```

3. 打开Visual Studio 2017,然后通过下面的File ->Open ->
Folder,选择到新创建的包含源文件和CMakeLists.txt的文件夹下。
3. 打开Visual Studio 2017,然后通过下面的`File ->Open ->
Folder`,选择到新创建的包含源文件和CMakeLists.txt的文件夹下。

4. 打开文件夹后,请注意CMake配置步骤是如何运行的(面板底部):

![](../../images/chapter13/13-3.png)

5. 现在,我们可以右键单击CMakeLists.txt(右面板),并选择Build:
5. 现在,可以右键单击CMakeLists.txt(右面板),并选择`Build`:

![](../../images/chapter13/13-4.png)

Expand All @@ -97,13 +97,13 @@ int main() {

我们已经看到Visual Studio 2017能很好地对接CMake,并且已经能够在IDE中配置和构建代码。除了构建步骤之外,还可以运行安装或测试步骤。可以通过右键单击CMakeLists.txt(右面板),访问这些文件。

然而,配置步骤是自动运行的,我们可能更想去修改配置选项。我们还想知道实际的构建和安装路径,以便测试我们的可执行文件。为此,我们可以选择CMake -> Change CMake Settings,到达如下画面:
然而,配置步骤是自动运行的,我们可能更想去修改配置选项。我们还想知道实际的构建和安装路径,以便测试我们的可执行文件。为此,我们可以选择`CMake -> Change CMake Settings`,如下图所示:

![](../../images/chapter13/13-6.png)

面板左上角,可以检查和修改生成器(本例中是Ninja)、设置、参数以及路径。构建路径在前面的显示中可以看到。这些设置被分组为构建类型(x86-Debugx86-Release等等),我们可以在面板栏顶部的中间部分,通过选择切换构建类型。
面板左上角,可以检查和修改生成器(本例中是Ninja)、设置、参数以及路径。构建路径在前面的显示中可以看到。这些设置被分组为构建类型(`x86-Debug``x86-Release`等等),我们可以在面板栏顶部的中间部分,通过选择切换构建类型。

现在知道了构建路径,我们可以测试编译后的可执行文件:
现在知道了构建路径,可以测试编译后的可执行文件:

```shell
$ ./hello-world.exe
Expand Down
22 changes: 11 additions & 11 deletions content/chapter13/13.2-chinese.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

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

在这个示例中,我们将重用“Hello World”示例,并将代码从Linux或macOS交叉编译到Windows。换句话说,我们将在Linux或macOS上配置和编译代码,并编译Windows平台的可执行文件
这个示例中,我们将重用“Hello World”示例,并将代码从Linux或macOS交叉编译到Windows。换句话说,我们将在Linux或macOS上配置和编译代码,并生成Windows平台的可执行文件

## 准备工作

我们从hello world示例(`hello-world.cpp`)开始:
我们从`hello world`示例(`hello-world.cpp`)开始:

```c++
#include <cstdlib>
Expand Down Expand Up @@ -65,9 +65,9 @@ install(

我们将按照以下步骤,在这个交叉编译的“hello world”示例中创建三个文件:

1. 创建一个文件夹,其中包括hello-world.cpp和CMakeLists.txt。
1. 创建一个文件夹,其中包括`hello-world.cpp``CMakeLists.txt`

2. 再创建一个toolchain.cmake文件,其内容为:
2. 再创建一个`toolchain.cmake`文件,其内容为:

```cmake
# the name of the target operating system
Expand All @@ -85,9 +85,9 @@ install(
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
```

3. 将CMAKE_CXX_COMPILER设置为对应的编译器(路径)。
3. `CMAKE_CXX_COMPILER`设置为对应的编译器(路径)。

4. 然后,通过将CMAKE_TOOLCHAIN_FILE指向工具链文件来配置代码(本例中,使用了从源代码构建的MXE编译器):
4. 然后,通过将`CMAKE_TOOLCHAIN_FILE`指向工具链文件,从而配置代码(本例中,使用了从源代码构建的MXE编译器):

```shell
$ mkdir -p build
Expand Down Expand Up @@ -117,7 +117,7 @@ install(
[100%] Built target hello-world
```

6. 注意,我们已经在Linux上获得hello-world.exe。将二进制文件复制到Windows上。
6. 注意,我们已经在Linux上获得`hello-world.exe`。将二进制文件复制到Windows上。

7. 在WIndows上可以看到如下的输出:

Expand All @@ -129,9 +129,9 @@ install(

## 工作原理

由于与目标环境(Windows)不同的主机环境(在本例中是GNU/Linux或macOS)上配置和构建代码,所以我们需要向CMake提供关于目标环境的信息,这些信息记录在 toolchain.cmake文件中( https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling )。
由于与目标环境(Windows)不同的主机环境(在本例中是GNU/Linux或macOS)上配置和构建代码,所以我们需要向CMake提供关于目标环境的信息,这些信息记录在`toolchain.cmake`文件中( https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling )。

首先,我们提供目标操作系统的名称:
首先,提供目标操作系统的名称:

```cmake
set(CMAKE_SYSTEM_NAME Windows)
Expand All @@ -145,15 +145,15 @@ set(CMAKE_CXX_COMPILER i686-w64-mingw32-g++)
set(CMAKE_Fortran_COMPILER i686-w64-mingw32-gfortran)
```

这个简单的例子中,我们不需要检测任何库或头文件。如果必要的话,我们将使用以下命令指定根路径:
这个例子中,我们不需要检测任何库或头文件。如果必要的话,我们将使用以下命令指定根路径:

```cmake
set(CMAKE_FIND_ROOT_PATH /path/to/target/environment)
```

例如,提供MXE编译器的安装路径。

最后,调整find命令的默认行为。我们指示CMake在目标环境中查找头文件和库文件:
最后,调整`find`命令的默认行为。我们指示CMake在目标环境中查找头文件和库文件:

```cmake
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
Expand Down
16 changes: 8 additions & 8 deletions content/chapter13/13.3-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-13/recipe-03 中找到,其中包含一个C++示例和Fortran示例。该示例在CMake 3.5版(或更高版本)中是有效的,并且已经在GNU/Linux、macOS和Windows上进行过测试。*

在这个示例中,将使用前一个示例中的知识,尽管是一个更有趣和更现实的例子:我们将交叉编译一个OpenMP并行化的Windows二进制文件。
在这个示例中,我们将交叉编译一个OpenMP并行化的Windows二进制文件。

```c++
#include <iostream>
Expand Down Expand Up @@ -76,9 +76,9 @@ install(

通过以下步骤,我们将设法交叉编译一个OpenMP并行化的Windows可执行文件:

1. 创建一个包含example.cpp和CMakeLists.txt的目录
1. 创建一个包含`example.cpp``CMakeLists.txt`的目录

2. 我们将使用与之前例子相同的toolchain.cmake:
2. 我们将使用与之前例子相同的`toolchain.cmake`:

```cmake
# the name of the target operating system
Expand All @@ -95,9 +95,9 @@ install(
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
```

3. 将CMAKE_CXX_COMPILER设置为对应的编译器(路径)。
3. `CMAKE_CXX_COMPILER`设置为对应的编译器(路径)。

4. 然后,通过将CMAKE_TOOLCHAIN_FILE指向工具链文件来配置代码(在本例中,使用了从源代码构建的MXE编译器):
4. 然后,通过`CMAKE_TOOLCHAIN_FILE`指向工具链文件来配置代码(本例中,使用了从源代码构建的MXE编译器):

```shell
$ mkdir -p build
Expand Down Expand Up @@ -129,7 +129,7 @@ install(
[100%] Built target example
```

6. 将example.exe拷贝到Windows环境下
6. `example.exe`拷贝到Windows环境下

7. 在Windows环境下,将看到如下的输出:

Expand Down Expand Up @@ -157,8 +157,8 @@ install(

## 工作原理

我们已经成功地使用一个简单的工具链进行交叉编译了一个可执行文件,并可以在Windows平台上并行执行。我们可以通过设置OMP_NUM_THREADS来指定OpenMP线程的数量。从一个线程到两个线程,我们观察到运行时从2.6秒减少到1.3秒。有关工具链文件的讨论,请参阅前面的示例。
我们已经成功地使用一个简单的工具链进行交叉编译了一个可执行文件,并可以在Windows平台上并行执行。我们可以通过设置`OMP_NUM_THREADS`来指定OpenMP线程的数量。从一个线程到两个线程,我们观察到运行时从2.6秒减少到1.3秒。有关工具链文件的讨论,请参阅前面的示例。

## 更多信息

可以交叉编译一组目标平台例如:Android。例如,可以参考:https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
可以交叉编译一组目标平台(例如:Android),可以参考:https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html
2 changes: 1 addition & 1 deletion content/preface/preface-chinese.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ CMake管理的项目的工作流发生在许多阶段(time),我们称之为*

第12章,生成文档,展示如何使用CMake也生成代码的文档。

第13章,替代生成器和交叉编译,展示了如何使用CMake交叉编译项目。
第13章,选择生成器和交叉编译,展示了如何使用CMake交叉编译项目。

第14章,测试仪表面板,显示如何将测试结果报告到在线仪表面板上。

Expand Down

0 comments on commit dace126

Please sign in to comment.