【发布时间】:2019-07-30 03:16:43
【问题描述】:
我使用 CMake 进行构建并希望保持我的项目灵活和简洁,因此我决定将代码文件分组到单独的文件夹中。
但是在src 文件夹中,我有带有代码的子文件夹,我想将它们分开到库中。我在我想要编译代码的地方创建了CMakeLists.txt,但是 CMake 抛出了错误。
我已阅读 this 问题和答案没有帮助。 我想我在其他地方搞砸了(或者解决方案有点过时)
这是我的目录树:
uint32-sort/
├── build
├── CMakeLists.txt $1 // Main build file, for whole project
├── include // Headers folder
│ ├── file_manager.hpp
│ └── sort_container.hpp
└── src // Source folder
├── main.cpp
└── sort_lib // Lib source folder
├── CMakeLists.txt $2 // Build file for lib
├── file_manager.cpp
└── sort_container.cpp
CMakeLists.txt $1 :
cmake_minimum_required(VERSION 3.15)
SET(PROJECT_NAME "Uint32Sort")
project(${PROJECT_NAME} VERSION 0.01 LANGUAGES CXX)
include_directories(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src)
add_executable(uint32sort main.cpp)
add_subdirectory(${PROJECT_SOURCE_DIR}/src/sort_lib/)
target_link_libraries(${PROJECT_NAME} SortCore)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON)
CMakeLists.txt $2:
cmake_minimum_required(VERSION 3.1.0)
SET(PROJECT_NAME "SortCore")
project(${PROJECT_NAME} VERSION 0.01 LANGUAGES CXX)
include_directories(${PROJECT_SOURCE_DIR}/../../include ${PROJECT_SOURCE_DIR})
file(GLOB SRC_LIB_FILES *.cpp)
add_library(${PROJECT_NAME} ${SRC_LIB_FILES})
target_link_libraries(${PROJECT_NAME} openmp)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON)
我希望在uint32-sort/build 文件夹中运行cmake .. 并获得与来自uint32-sort/src/sort_lib/ 的库链接的可执行文件,但我得到的都是这个错误:
CMake Error at CMakeLists.txt:12 (target_link_libraries):
Cannot specify link libraries for target "Uint32Sort" which is not built by
this project.
【问题讨论】: