shell – 如何运行CMake execute_process命令?

前端之家收集整理的这篇文章主要介绍了shell – 如何运行CMake execute_process命令?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的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(uname -a命令)到的CMakeLists.txt文件,并得到了MSYS_NT-6.1 MYCOMPUTERNAMEHERE 2.5.2(0.297 / 5/3)2016年7月15日08:31 x86_64的MSYS.所以我猜这是通过MSYS运行的答案……但CMake如何知道这样做?

The documentation说:

“CMake直接使用操作系统API执行子进程.所有参数都通过VERBATIM传递给子进程.没有使用中间shell,所以shell操作符如>被视为普通参数.”

但我不明白这意味着什么,特别是考虑到如果我使用以下行,我将/usr/bin/make作为输出

execute_process(COMMAND which make)

发生了什么,和/或我怎样才能弄清楚这些命令运行的环境/ shell /是什么?

CMake附带了Kitware的OS抽象/检测库kwsys:

KWSys provides a platform-independent API to many common system
features that are implemented differently on every platform.

execute_process()魔法在ProcessWin32.c使用CreateProcessW()或ProcessUNIX.c使用execvp()发生,具体取决于您使用的是哪个版本的CMake.

所以 – 正如@Tsyvarev所评论的那样 – 您的行为可能是在PATH环境中使用MinGW / MSYS的Win32 / 64版本的CMake(查找给定的Unix特定命令)或从MSYS运行的MinakeWW32 / 64版本的CMake.

您也可以考虑使用像FindUnixCommands这样的东西来获取有问题的Unix工具的绝对路径.

参考

> CMake does not find custom command “ls”

猜你在找的Bash相关文章