2016-10-11 8 views
0

CMakeLists.txt 파일에 다음 줄이 있습니다. Windows 7에서 CMake 3.5.2를 실행하고 Visual Studio 12 2013을 "기본 기본 컴파일러 사용"이있는 GUI 생성기로 사용합니다.CMake execute_process 명령은 어떻게 실행됩니까?

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가 사용하는 것이라면 어떻게해야할지 모르겠습니다.

편집 : 나는 CMakeLists.txt 파일에 execute_process(COMMAND uname -a)을 넣어 MSYS_NT-6.1 MYCOMPUTERNAMEHERE 2.5.2(0.297/5/3) 2016-07-15 08:31 x86_64 Msys을 얻었다. 그래서 나는 그것이 MSYS를 통해 실행되고 있다는 답변을 추측합니다 ... 그러나 CMake는 이것을 어떻게 알 수 있습니까?

The documentation는 말한다.

"CMake 직접 모든 인수가 자식 프로세스에 그대로 전달되는 운영 체제 API를 사용하여 자식 프로세스를 실행> 일반으로 처리하는 등 없음 중간 쉘, 그래서 쉘 연산자를 사용하지 않습니다. 인수. "

그러나 나는 특히 내가 다음 줄을 사용하는 경우, I 출력으로 /usr/bin/make를 얻을 수 있음을 고려하고, 무엇을 의미하는지 이해가 안 :

execute_process(COMMAND which make) 

것은 무슨 일이 벌어지고, 및/또는 내가 어떻게 알아낼 수 어떤 환경/셸 /이 명령들이 실행되고 있습니까?

+1

보인다. – Tsyvarev

+0

그것은 이전에 (실제로 MSYS2를 사용하여) 컴파일하기 위해이 방법을 사용했기 때문에 의미가 있습니다. 그러나 CMake는 어떻게 사용하는지 알고 있습니까? –

+0

아마도 MSYS2에서 cmake를 실행하거나 해당 환경 아래에 cmake를 설치해야합니다. – Tsyvarev

답변

2

CMake가 Kitware의 OS 추상화/감지 라이브러리 kwsys와 함께 제공 :

KWSys는 많은 일반적인 시스템에 모든 플랫폼에서 다르게 구현 기능을 플랫폼 독립적 인 API를 제공한다.

execute_process() 마법은 사용하는 CMake의 버전의 따라 execvp()를 사용 CreateProcessW() 또는 ProcessUNIX.c를 사용하여 ProcessWin32.c에서 일어나고있다.

그래서 - @Tsyvarev 댓글 것처럼 - 당신의 행동 수 중 하나 PATH 환경에서 MinGW/MSYS와 CMake의는 Win32/64 버전 (주어진 유닉스 특정 명령을 찾는) 또는 CMake의 MinGW32/64 버전에서 실행할 수 MSYS.

또한 Unix 도구의 절대 경로를 얻으려면 FindUnixCommands과 같은 것을 사용하는 것이 좋습니다. 당신이는 MinGW 또는 이와 유사한에서 cmake를 실행처럼

참조

+0

감사합니다. –