加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell – 如何运行CMake execute_process命令?

发布时间:2020-12-15 18:57:32 所属栏目:安全 来源:网络整理
导读:我的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
我的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”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读