CMake的 - 在我目前的项目中使用我的其他项目的代码
问题描述:
我有这个结构的C++项目:CMake的 - 在我目前的项目中使用我的其他项目的代码
-- ProjectFolder
-- Project_Prototype1
-- Project_Prototype2
Project_Prototype1有CMakeLists与此内容的文件:
cmake_minimum_required(VERSION 2.8)
project(Neuromarketing-RF)
find_package(Boost 1.58.0 REQUIRED COMPONENTS filesystem system)
include_directories(${Boost_INCLUDE_DIRS} include src/external)
find_package(OpenCV 3 REQUIRED)
file(GLOB FACETRACKER_HEADERS "external/FaceTracker/include/FaceTracker/*.h")
file(GLOB FACETRACKER_SRC "external/FaceTracker/src/lib/*.cc")
file(GLOB SOURCES "src/*cpp")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin/")
add_executable(Neuromarketing-RF ${FACETRACKER_SRC} ${SOURCES})
target_link_libraries(Neuromarketing-RF ${OpenCV_LIBS} ${Boost_LIBRARIES})
target_compile_features(Neuromarketing-RF PRIVATE cxx_range_for)
Prototype1是使用外部库称为FaceTracker。
在Prototype2我想从Prototype1访问一个文件,但我不想重新定义Prototype2 CMakeLists(FaceTracker,Boost等)上的Prototype1的所有依赖关系。
如何编写Prototype2 CMakeLists以使用Prototype1而无需手动重新定义所有内容?
这里是我当前的CMakeLists.txt为Prototype2:
cmake_minimum_required (VERSION 2.6)
project (Neuromarketing-CNN)
find_package(OpenCV REQUIRED)
find_package(Boost 1.58.0 REQUIRED COMPONENTS filesystem system)
add_subdirectory("../Neuromarketing-RF" "../Neuromarketing-RF/bin")
file (GLOB NM_RF_SRC "../Neuromarketing-RF/src/*.cpp")
include_directories(include ../Neuromarketing-RF/include ${Boost_INCLUDE_DIRS})
file(GLOB SOURCES "src/*.cpp")
add_executable (bin/Neuromarketing-CNN ${SOURCES} ${NM_RF_SRC})
target_link_libraries(bin/Neuromarketing-CNN ${OpenCV_LIBS} ${Boost_LIBRARIES})
target_compile_features(bin/Neuromarketing-CNN PRIVATE cxx_range_for)
答
最简单的方法是创建一个包含所有的依赖共同文件既CMakeList.txt文件,并使用包括()。比如有一个文件名ProjectFolder包含相关find_package(/我-includes.cmake)语句,并在这两个CMakeList.txt文件添加一行在包含文件中定义
include ("../my-includes.cmake")
一切可用包含文件。