2016-09-15 196 views
1

我學習使用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文件夾,我該如何解決這個問題?

回答

0

用於命令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) 
+0

它給了我新的錯誤:在/ 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

+0

編輯您的問題並顯示如何修改代碼。 – Tsyvarev

+0

我更新了它。它在我的構建文件夾中創建了一個空的「測試」文件夾。 – Dobob

相關問題