CMake的:无法打开输出文件没有这样的文件或目录
问题描述:
我学习使用cmake的使用共享库中的项目,但我不断收到此错误:CMake的:无法打开输出文件没有这样的文件或目录
Linking CXX executable test/test/robot_test
/usr/bin/ld: cannot open output file test/test/robot_test: No such file or directory
collect2: error: ld returned 1 exit status
make[2]: *** [test/test/robot_test] Error 1
make[1]: *** [CMakeFiles/test/robot_test.dir/all] Error 2
make: *** [all] Error 2
这里是我的CMake的文件:
cmake_minimum_required(VERSION 2.8.12)
project("Particle Filter")
set(CMAKE_BUILD_TYPE Release)
include_directories(include)
set(LIB_SOURCES src/robot.cc src/sampler.cc src/general.cc)
set(LIB_HEADERS include/robot.h include/sampler.h include/general.h)
add_library(my_lib SHARED ${LIB_SOURCES} ${LIB_HEADERS})
install(TARGETS my_lib DESTINATION lib)
set(APP_SOURCES test/robot_test.cc test/sampler_test.cc)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/test")
foreach(test ${APP_SOURCES})
#cut off .cc of src files using empty string
string(REPLACE ".cc" "" testname ${test})
add_executable(${testname} ${test})
target_link_libraries(${testname} my_lib)
endforeach(test ${APP_SOURCES})
add_definitions(
-std=c++11 # Or -std=c++0x
# Other flags
)
这里是我的树(不包括含有大量本等作为我的makefile,。所以build目录和某文件):
├── CMakeLists.txt
├── driver.cc
├── include
│ ├── general.h
│ ├── robot.h
│ └── sampler.h
├── lib
├── notes
├── src
│ ├── general.cc
│ ├── robot.cc
│ └── sampler.cc
└── test
├── robot_test.cc
└── sampler_test.cc
另外,sudo make install后,.so或.a文件没有保存到我的lib文件夹,我该如何解决这个问题?
答
用于命令add_executable第一个参数是不是一个文件名但目标的一个名称。目标名称不应包含特殊符号,如斜线(“/”)。
您可以控制通过设置创建可执行文件的输出目录变量CMAKE_RUNTIME_OUTPUT_DIRECTORY:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/test")
...
# Relative path to executable will be 'test/robot_test'.
add_executable(robot_test robot_test.cc)
它给了我新的错误:在/ usr/bin中/ LD:无法打开输出文件的测试/测试/ robot_test:没有这样的文件或目录 collect2:error:ld返回1退出状态 make [2]:*** [test/test/robot_test] Error 1 make [1]:*** [CMakeFiles/test/robot_test.dir/all] Error 2 make:*** [all]错误2 – Dobob
编辑您的问题并显示如何修改代码。 – Tsyvarev
我更新了它。它在我的构建文件夹中创建了一个空的“测试”文件夹。 – Dobob