【发布时间】:2018-07-30 12:52:37
【问题描述】:
在我的项目中,我使用的是仅标头库 rapidjson v1.1.0。
└── my_project
├── CMakeLists.txt
├── src
│
├── 3rdParty/tiny_dnn (header only)
│ ├── CMakeLists.txt
│ ├── src
│ └── rapidjson_v0.2
│
└── rapidjson_v1.1.0
现在的问题是tiny-dnn 也包含了 rapidjson(但版本较旧),所以当我尝试在主 CMakeLists.txt 中包含 tiny_dnn 时,例如 include_directories(${PROJECT_SOURCE_DIR}/3rdParty/tiny_dnn) 一些冲突来自 tiny-dnn 搜索我的 rapidjson或者我的项目在 tiny-dnn 的 rapidjson 中搜索。
my_project 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;
}
【问题讨论】:
-
是否可以在没有
include_directories的情况下使用其中一个(甚至两者),但在将其配置和安装到特定位置并使用find_package将其用作客户端之后? -
我想尽可能保持 tiny-dnn 库不变,所以最好同时获得两者。另外,差异比较大,所以要把tiny-dnn rapidjson提升到v1.1.0会很费劲。
-
您能否发布您的
CMakeLists.txt的最小相关版本,确切的错误是什么? (请修改您的帖子,而不是 cmets) -
感谢您的帮助。我添加了最小文件。 tiny-dnn的CMakeLists.txt可以在开源repo下查看。
-
具体的错误是什么?
标签: cmake shared-libraries static-libraries rapidjson header-only