当我更新在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来避免这个错误的意思吗?
答案 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
。