2016-01-06 45 views
0

我有這個結構的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) 

回答

1

最簡單的方法是創建一個包含所有的依賴共同文件既CMakeList.txt文件,並使用包括()。比如有一個文件名ProjectFolder包含相關find_package(/我-includes.cmake)語句,並在這兩個CMakeList.txt文件添加一行在包含文件中定義

include ("../my-includes.cmake") 

一切可用包含文件。

相關問題