【发布时间】:2016-10-11 19:07:39
【问题描述】:
我的 CMakeLists.txt 文件中有以下几行。我在 Windows 7 上运行 CMake 3.5.2,并使用 Visual Studio 12 2013 作为生成器,并在 gui 中选中“使用默认本机编译器”。
find_path(FORTRAN_DIR NAMES cdll.cpp fdll.f90 Makefile PATHS ../source)
execute_process(COMMAND make
WORKING_DIRECTORY ${FORTRAN_DIR})
这运行得很好。
但它究竟是如何运行的?它在 Windows 上!
我之前在 Windows 上通过 MSYS2 (MinGW) 编译过 Makefile,但如果 CMake 使用的是这个,那么我不确定它是如何知道这样做的。
编辑:我将execute_process(COMMAND uname -a) 放入CMakeLists.txt 文件并得到MSYS_NT-6.1 MYCOMPUTERNAMEHERE 2.5.2(0.297/5/3) 2016-07-15 08:31 x86_64 Msys。所以我想这回答了它正在通过 MSYS 运行......但是 CMake 怎么知道这样做呢?
“CMake 直接使用操作系统 API 执行子进程。所有参数都逐字传递给子进程。不使用中间 shell,因此将 > 等 shell 运算符视为普通参数。”
但我不明白这意味着什么,特别是考虑到如果我使用以下行,我会得到 /usr/bin/make 作为输出:
execute_process(COMMAND which make)
发生了什么,和/或我如何才能确定运行这些命令的环境/shell/什么?
【问题讨论】:
-
看起来你在 MinGW 或类似的环境下运行 cmake。
-
这是有道理的,因为我以前就是这样编译的(实际上是使用 MSYS2),但是 CMake 怎么知道使用它呢?
-
可能是你在MSYS2下运行cmake,或者安装在那个环境下。
-
不,@Tsyvarev,没有在 MSYS2 下运行 CMake。在 Windows 下运行它。
-
我在安装 MSYS2 之前也安装了 CMake。
标签: shell cmake environment