CMake на MSYS2 зависает - PullRequest
       25

CMake на MSYS2 зависает

0 голосов
/ 01 сентября 2018

Я использую MSYS2 в Windows 8, и у меня возникают проблемы с зависанием / блокировкой CMake.

Вот минимальный пример:

main.cpp:

#include <iostream>
int main()
{   
   std::cout << "Hello World!" << std::endl;
   return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
project (helloworld)
add_executable(helloworld main.cpp)

Если я открою консоль MSYS2, перейдите в каталог, в котором находятся оба вышеуказанных файла, и выполните команду

cmake .

дальнейших выходных данных нет, и консоль блокируется. Создается пустая папка CMakeFiles, но больше ничего не происходит. Я пробовал с CMake 3.10.2 и 3.2.3, и то же самое происходит для обеих версий.


Ниже приведен вывод strace, если он представляет интерес: Если я запускаю команду

strace cmake .

Я получаю разные выходные данные в разное время. Иногда последняя строка выглядит примерно так:

19   4436   [main] cmake 2320 child_copy: done

Иногда это что-то вроде

44   239509 [main] cmake 9820 open_shared: name cygpid.10668 n 10668, shared 0xBB0000 (wanted 0x0), h 0x344, *m 6

И иногда конец вывода выглядит примерно так:

   20 2735480 [main] cmake 14200 kill_pgrp: killing pid 5900, pgrp 5900, p->ctty /dev/pty0, ctty /dev/pty5
   24 2735504 [main] cmake 14200 sig_send: 1 = SetNamedPipeHandleState (0x358, PIPE_NOWAIT, NULL, NULL)
   16 2735520 [main] cmake 14200 sig_send: sendsig 0x358, pid 5900, signal 17, its_me 0
   19 2735539 [main] cmake 14200 sig_send: Not waiting for sigcomplete.  its_me 0 signal 17
   24 2735563 [main] cmake 14200 sig_send: returning 0x0 from sending signal 17
   23 2735586 [main] cmake 14200 _pinfo::kill: 0 = _pinfo::kill (17), pid 5900, process_state 0x4C5
   20 2735606 [main] cmake 14200 kill_pgrp: killing pid 15152, pgrp 15152, p->ctty /dev/pty5, ctty /dev/pty5
 3486 2739092 [main] cmake 14200 sig_send: 1 = SetNamedPipeHandleState (0x3A0, PIPE_NOWAIT, NULL, NULL)
   44 2739136 [main] cmake 14200 sig_send: sendsig 0x3A0, pid 15152, signal 17, its_me 0
   33 2739169 [main] cmake 14200 sig_send: Not waiting for sigcomplete.  its_me 0 signal 17
   27 2739196 [main] cmake 14200 sig_send: returning 0x0 from sending signal 17
   25 2739221 [main] cmake 14200 _pinfo::kill: 0 = _pinfo::kill (17), pid 15152, process_state 0x61

В чем может быть причина этих проблем?


EDIT: Выход

cmake . --trace

перед зависанием выглядит следующим образом:

Running with trace output on.
d/Dropbox/Programming/Cplusplus/workspace/Testprograms/test_cmake/CMakeLists.txt(1): cmakeminimum_required(VERSION 3.0.0 )
d/Dropbox/Programming/Cplusplus/workspace/Testprograms/test_cmake/CMakeLists.txt(2): project(helloworld ) 
usr/share/cmake-3.10.2/Modules/CMakeDetermineSystem.cmake(36): 
if(CMAKE_HOST_UNIX )
usr/share/cmake-3.10.2/Modules/CMakeDetermineSystem.cmake(37): find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin ) 
usr/share/cmake-3.10.2/Modules/CMakeDetermineSystem.cmake(38): if(CMAKE_UNAME)
usr/share/cmake-3.10.2/Modules/CMakeDetermineSystem.cmake(39): if(CMAKE_HOST_SYSTEM_NAME STREQUAL AIX )
usr/share/cmake-3.10.2/Modules/CMakeDetermineSystem.cmake(45): else() 
usr/share/cmake-3.10.2/Modules/CMakeDetermineSystem.cmake(46): 
exec_program(${CMAKE_UNAME1 ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION )

1 Ответ

0 голосов
/ 01 сентября 2018

CMake не любит в сборках деревьев. Создайте отдельную папку для сборки.

mkdir build
cd build
cmake ..

CMake не собирает ваши программы, он только создает файлы сборки. Ваш следующий шаг будет.

mingw32-make

Если у вас нет других проблем, вы сможете запустить вашу программу.

Mike

...