我使用cmake进行构建,并希望保持我的项目灵活和合成,因此我决定将代码文件分组为单独的文件夹。但是在src
文件夹中,我有一个子文件夹,其中有代码,我希望将我分开到库中。我制作了CMakeLists.txt
,我希望代码编译,但是CMAKE会引发错误。
我已经阅读了这个问题,答案无济于事。我想我在其他地方搞砸了(或解决方案有点过时(
这是我的目录树:
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.
正如错误所说:您没有名为 Uint32Sort
的目标。但是,您有一个名为uint32sort
的目标:
# v---------- executable target
add_executable(uint32sort main.cpp)
因此,您的target_link_libraries
调用应将目标用作其第一个参数:
# use PRIVATE of no public header use SortCore
target_link_libraries(uint32sort PUBLIC SortCore)