CMake -不存在目标规则



在Ubuntu中,我下载了一个第三方共享库(liba1.so),放在/lib/external/lib中。相关的头文件我放在/lib/external/include中。我自己的头文件放在/include/public/和/include/private/中。现在(测试mylib)我想链接到我的main.cpp代码,使用CMake.

我的结构:

**My structure:** 
| 
| 
+---CMakeLists.txt 
| 
+---lib 
|    | 
|    +---extern 
|         |    
|         +---lib 
|         |    | 
|         |    +---liba.so 
|         |    +---libb.so 
|         |    +---liba12.so 
|         | 
|         +---include 
|                |     
|                +...headers.h 
|                
+---include 
|     | 
|     +---public 
|     |     | 
|     |     +---file1.hpp 
|     |     +... 
|     |
|     +---private 
|            | 
|            +---file2.hpp 
|            +... 
| 
+---src 
| 
+---public 
|     | 
|     +---file1.cpp 
|     +... 
| 
+---private 
|     | 
|     +---file2.cpp 
|     +...
| 
+---main.cpp

我CMakeLists.txt:

cmake_minimum_required(VERSION 3.9...3.19) 
if(${CMAKE_VERSION} VERSION_LESS 3.12) 
cmake_policy(VERSION ${CMAKE_VERSION}) 
endif() 
project(mylib VERSION 0.0.1 DESCRIPTION "Test" LANGUAGES CXX ) 
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DTPM_POSIX") 
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) 
set(CMAKE_CXX_EXTENSIONS OFF) 
add_library(${PROJECT_NAME} STATIC src/private/file2.cpp src/public/file1.cpp ) 
add_library(lib SHARED IMPORTED) 
set_target_properties(lib PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/extern/lib/liba.so) 
set_target_properties(lib PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/extern/lib/libb.so) 
set_target_properties(lib PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/lib/extern/lib/liba12.so) 
target_link_libraries(${PROJECT_NAME} PUBLIC lib) 
target_include_directories(${PROJECT_NAME} 
PUBLIC 
$<INSTALL_INTERFACE:lib/extern/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/lib/extern/include>
$<INSTALL_INTERFACE:include/public>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/public>
$<INSTALL_INTERFACE:include/private>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/private> 
) 
add_executable(test src/main.cpp) 
target_link_libraries(test PRIVATE mylib) 
ERROR: 
[build] Consolidate compiler generated dependencies of target mylib 
[build] [ 60%] Built target mylib [build] Consolidate compiler generated dependencies of target test 
[build] gmake[2]: *** No rule exists to target „lib/extern/lib/liba12.so“, 
[build] required by „test“ to create. Ending. 
[build] gmake[1]: *** [CMakeFiles/Makefile2:111: CMakeFiles/test.dir/all] Error 2 
[build] gmake: *** [Makefile:91: all] Error 2 
[proc] The command: /usr/bin/cmake --build /home/mathew/proj/build --config Debug --target all -j 10 -- exited with code: 2 and signal: null [build] Build finished with exit code 2

导入的文件相对于源目录,而不是构建目录。设置IMPORTED_LOCATION时,需要使用CMAKE_CURRENT_SOURCE_DIR,而不是CMAKE_CURRENT_BINARY_DIR

最新更新