2016-02-17 2 views
1

Когда я обновляю исходные файлы моего проекта, настроенные на cmake, и запускаю команду make в каталоге сборки, я получаю странное и не очень явное сообщение об ошибке после ссылки.Странная ошибка с «cmake -E create_symlink»

Команда create_symlink-видимому, участвует (make VERBOSE=1):

[100%] Building CXX object CMakeFiles/thing.dir/main.cpp.o 
Linking CXX executable thing 
/usr/bin/cmake -E cmake_link_script CMakeFiles/thing.dir/link.txt --verbose=1 
/usr/bin/c++  CMakeFiles/thing.dir/main.cpp.o -o thing -rdynamic 
/usr/bin/cmake -E create_symlink /path/to/stuff/ stufflink 
make[2]: *** [thing] Error 1 
make[2]: Leaving directory « /home/cromod/bug/build » 
make[1]: *** [CMakeFiles/thing.dir/all] Erreur 2 
make[1]: Leaving directory « /home/cromod/bug/build » 
make: *** [all] Error 2 

Исполняемый, кажется, правильно скомпилированы и связаны, потому что я могу использовать его без проблем. Кроме того, команда make делает сообщение об ошибке исчезнет.

Вот простой CMake сценарий, чтобы воспроизвести этот случай:

cmake_minimum_required(VERSION 2.8) 
project(thing) 
add_executable(thing main.cpp) 
set(STUFF_PATH "/path/to/stuff/") 
add_custom_command(TARGET thing POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${STUFF_PATH} stufflink) 

Я вынужден запустить этот сценарий CMake на Debian 7/CMake 2.8.9 (среди других платформ) :(

Почему это create_symlink неудачу? вы знаете, средний, чтобы избежать этой ошибки с CMake 2,8?

ответ

1

на самом деле, я встретил краевой случай команды create_symlink на CMake 2.8.

Конкретный путь /path/to/stuff не существует на платформе со странной ошибкой, поэтому stufflink является сломанной символической ссылкой.

В старых версиях cmake (< 3.0.0), когда cmake -E create_symlink ... пытается переписать сломанную символическую ссылку, она возвращает 1 без явного сообщения об ошибке.

Эта ошибка связана с тем проблем, обнаруженных в системе отслеживания ошибок в CMake и их разрешение (в CMake 3.0.0) фиксирует мой случай тоже:

Поскольку я вынужден запустить мой сценарий cmake на нескольких платформах, я добавлю переменную окружения для определения /path/to/stuff.