奇怪的错误与" cmake -E create_symlink"

时间:2016-02-17 23:33:53

标签: cmake makefile symlink

当我更新在cmake上配置的项目的源文件并在构建目录中再次启动make命令时,我在链接后得到一个奇怪但不是非常明确的错误消息。

似乎涉及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)

我被迫在debian 7 / cmake 2.8.9(以及其他平台)中运行这个cmake脚本:(

为什么create_symlink会失败?你知道用cmake 2.8来避免这个错误的意思吗?

1 个答案:

答案 0 :(得分:1)

事实上,我在cmake 2.8上遇到了create_symlink命令的边缘情况。

特定路径/path/to/stuff在平台上不存在奇怪的错误,因此stufflink是一个破损的符号链接。

在旧的cmake版本(< 3.0.0)上,当cmake -E create_symlink ...尝试重写损坏的符号链接时,它返回1而没有任何明确的错误消息。

此错误与cmake的bug跟踪器中发现的问题有关,他们的解决方案(在cmake 3.0.0中)也解决了我的问题:

由于我被迫在多个平台上运行我的cmake脚本,我将添加一个环境变量来定义/path/to/stuff