CMake:如何处理相同库的多个版本?
在我的项目中,我使用的是rapidjson v1.1.0版本的仅标题库CMake:如何处理相同库的多个版本?,cmake,shared-libraries,static-libraries,rapidjson,header-only,Cmake,Shared Libraries,Static Libraries,Rapidjson,Header Only,在我的项目中,我使用的是rapidjson v1.1.0版本的仅标题库 └── my_project ├── CMakeLists.txt ├── src │ ├── 3rdParty/tiny_dnn (header only) │ ├── CMakeLists.txt │ ├── src │ └── rapidjson_v0.2 │ └── rapidjson_v1.1.0 现在的问题是,它也包含了r
└── my_project
├── CMakeLists.txt
├── src
│
├── 3rdParty/tiny_dnn (header only)
│ ├── CMakeLists.txt
│ ├── src
│ └── rapidjson_v0.2
│
└── rapidjson_v1.1.0
现在的问题是,它也包含了rapidjson(但是是一个较旧的版本),所以当我尝试在主CMakeLists.txt中包含tiny_dnn时,比如include_目录(${PROJECT_SOURCE_DIR}/3rdParty/tiny_dnn)
在tiny dnn搜索我的rapidjson或在tiny dnn的rapidjson中搜索我的项目时,会产生一些冲突
my_项目CMakeLists.txt
cmake_minimum_required(VERSION 3.9)
project(my_project)
# check the build type and set compiler and linker flags
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
IF(CMAKE_BUILD_TYPE MATCHES DEBUG)
message("Debug build")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas -g -O0 -std=c++17 -Ddeveloper_build")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIC -g -O0")
ELSEIF(CMAKE_BUILD_TYPE MATCHES RELEASE)
message("Release build")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unknown-pragmas -O3 -std=c++17")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -O3")
ELSE()
message(FATAL_ERROR "No build type specified")
ENDIF()
find_package(Boost COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/3rdParty/tiny-dnn)
file(GLOB_RECURSE SOURCE_FILES src/*.cpp src/*.c)
set(SOURCE_FILES
${SOURCE_FILES})
add_executable(my_project ${SOURCE_FILES})
target_link_libraries(my_project ${Boost_LIBRARIES} pthread)
set_target_properties(my_project PROPERTIES SUFFIX ${CMAKE_BUILD_TYPE})
my_project.cpp
#include <tiny_dnn/tiny_dnn.h>
#include <rapidjson/rapidjson.h> // <- usr/local/include/rapidjson
int main(int argc, char **argv)
{
rapidjson::Document d; // <- uses rapidjson (v0.2) of tiny_dnn/cereal/external/rapidjson but in my project i would use /usr/local/include/rapidjson (v1.0.1)
return 0;
}
#包括
#通常包括//——不要。强制一个客户端使用更高/更好的。即使您绕过这些问题,也可能会违反一条定义规则,并在以后得到SEGFULT。是否可以使用其中一条(或甚至两条)没有include_目录
,但在特定位置配置和安装它并将其用作带有find_包
的客户端后,我希望尽可能保持微型dnn库不变,因此最好同时获得这两个目录。此外,差异相对较大,因此将微小的dnn rapidjson提升到v1.1.0需要付出大量努力。能否请您发布一个与CMakeLists.txt
相关的最小版本,具体错误是什么?(请修改你的帖子,而不是评论)谢谢你的帮助。我已经添加了最小的文件。tiny dnn的CMakeLists.txt可以在开源repo下查看。确切的错误是什么?