我的CMakeLists.txt文件中有以下几行。我在Windows 7上运行CMake 3.5.2,并使用Visual Studio 12 2013作为生成器,在gui中选中了“使用默认本机编译器”。
<?php
if ($post->post_parent) {
$ancestors=get_post_ancestors($post->ID);
$root=count($ancestors)-1;
$parent = $ancestors[$root];
} else {
$parent = $post->ID;
}
$sibblings = wp_list_pages("title_li=&child_of=". $parent ."&echo=0");
$children = wp_list_pages( array(
'title_li' => '',
'child_of' => $post->ID,
'echo' => 0,
'sort_column' => 'menu_order, post_title'
) );
?>
<?php if ($sibblings) { ?>
<ul class="page-nav hidden-sm hidden-xs">
<?php echo $sibblings; ?>
</ul>
<?php } else {?>
<ul class="page-nav hidden-sm hidden-xs">
<?php echo $sibblings; ?>
</ul>
<ul class="page-nav-children hidden-sm hidden-xs">
<?php echo $children; ?>
</ul>
<?php } ?>
这样运行得很好。
但它到底是怎么运行的?它在Windows上!
之前我在Windows上通过MSYS2(MinGW)编译了Makefile,但如果那是CMake正在使用的,那么我不知道它是如何做到的。
修改:我将find_path(FORTRAN_DIR NAMES cdll.cpp fdll.f90 Makefile PATHS ../source)
execute_process(COMMAND make
WORKING_DIRECTORY ${FORTRAN_DIR})
放入CMakeLists.txt文件并获得execute_process(COMMAND uname -a)
。所以我猜这是通过MSYS运行的答案......但CMake如何知道这样做?
“CMake直接使用操作系统API执行子进程。所有参数都通过VERBATIM传递给子进程。没有使用中间shell,所以shell操作符如&gt;被视为普通参数。”
但是我不明白这意味着什么,特别是考虑到如果我使用以下行,我得到MSYS_NT-6.1 MYCOMPUTERNAMEHERE 2.5.2(0.297/5/3) 2016-07-15 08:31 x86_64 Msys
作为输出:
/usr/bin/make
发生了什么,和/或我怎样才能找出环境/ shell /运行这些命令的内容?
答案 0 :(得分:2)
CMake附带了Kitware的OS抽象/检测库kwsys
:
KWSys为许多常见系统提供了独立于平台的API 在每个平台上以不同方式实现的功能。
execute_process()
使用CreateProcessW()
或ProcessWin32.c
execvp()
使用MinGW
进行MSYS
魔术,具体取决于您使用的是哪个版本的CMake。
所以 - 正如@Tsyvarev所评论的那样 - 你的行为可能是PATH
环境中带有MSYS
/ function fa = mymotor(theta)
%this matlab file will generate back emf of phase a
%function [fa]= mymotor(theta)
%inputs: theta -- rotor position in rad
%output: fa -- function of rotor position of phase a
pi=3.14159;
theta=0<theta<2*pi;
if(0<theta<pi/6)
fa=(6/pi)*theta;
elseif(pi/6<theta<5*pi/6)
fa=1;
elseif(5*pi/6<theta<7*pi/6)
fa=-(6/pi)*theta + 6;
elseif(7*pi/6<theta<11*pi/6)
fa=-1;
else
fa=(6/pi)*theta - 12;
end
的CMake的Win32 / 64版本(找到给定的Unix特定命令) )或者MinGW32 / 64版本的CMake从function fb = mymotor(theta)
%this matlab file will generate back emf of phase b
%function [fb]= mymotor(theta, E)
%inputs: theta -- rotor position in rad
%output: eb -- function of rotor position of phase b
pi=3.14159;
theta=0<theta<2*pi;
if(0<theta<pi/2)
fb=-1;
elseif(pi/2<theta<5*pi/6)
fb=(6/pi)*theta - 4;
elseif(5*pi/6<theta<9*pi/6)
fb=1;
elseif(9*pi/6<theta<11*pi/6)
fb=-(6/pi)*theta + 10;
else
fb=1;
end
运行。
此外,您可以考虑使用类似ProcessUNIX.c
之类的东西来获取相关Unix工具的绝对路径。
<强>参考强>