2013-01-13 31 views
5

我正在嘗試使用OpenKinect項目編寫一些程序。我想將OpenKinect的主分支添加爲我的項目源代碼的子目錄。但是,如果你看看OpenKinect自己的CMake,那裏有太多的東西,我不需要一切。有一些選擇在那裏,它被設置爲ON或OFF,像這樣:如何在我自己的CMake項目中包含現有的CMake git repo作爲子模塊?

OPTION(BUILD_AUDIO "Build audio support" OFF) 
OPTION(BUILD_REDIST_PACKAGE "Build libfreenect in a legally-redistributable manner (only affects audio)" OFF) 
OPTION(BUILD_EXAMPLES "Build example programs" ON) 
OPTION(BUILD_FAKENECT "Build fakenect mock library" ON) 
OPTION(BUILD_C_SYNC "Build c synchronous library" ON) 
OPTION(BUILD_CPP "Build C++ Library (currently header only)" ON) 
OPTION(BUILD_CV "Build OpenCV wrapper" ON) 
OPTION(BUILD_AS3_SERVER "Build the Actionscript 3 Server Example" OFF) 
OPTION(BUILD_PYTHON "Build Python extension" ON) 
IF(PROJECT_OS_LINUX) 
    OPTION(BUILD_CPACK "Build an RPM or DEB using CPack" ON) 
ENDIF(PROJECT_OS_LINUX) 

,而無需對OpenKinect文件的任何重大變化(這樣我就可以git pull任何時候,我需要),我該怎麼辦只導入一些零件(例如,C++ wrapperOpenCV bindings)到我自己的CMake項目中?我想拷貝某些不依賴於其他目錄的目錄,如果我完全重寫了CMake文件的話。我再也不能使用git了,但這將是一個快速修復。但是我收到奇怪的錯誤,比如「stdexcept沒有在這個範圍內聲明」,這是沒有意義的,因爲它是一個標準的gC++庫。

+1

爲什麼不 「叉」 OpenKinect,並保持在一個單獨的分支更改。這樣你就可以在git-OpenKinect的更新中保持「拉」狀態,同時保持你的「修改」在一個單獨的分支上。那麼你可以做約翰內斯S的建議。 –

回答

6

如果您只是要啓用/禁用該庫的某些部分,則可以在致電ADD_SUBDIRECTORY之前簡單地設置適當的選項。

只需使用與庫中的CMakeLists.txt相同的OPTION命令,但根據需要將它們設置爲ON/OFF。當然,oyu可以隨意更改/選擇描述字符串。

可選擇地(並且如果選擇具有比真/假不同的值),則可以使用SET(.... CACHE ...)

例如

SET(BUILD_CPP TRUE CACHE BOOL "Build C++ Library (currently header only)") 

類似的問題: Override option in CMake subproject

+0

但是這意味着改變OpenKinect的CMakeLists.txt,這是不希望的... –

+1

不,根本不是。在調用'ADD_SUBDIRECTORY(....)'來包含OpenKinect之前,只需在* your * CMakeLists.txt中設置它們即可。所有設置/變量都由子項目繼承。 –

+0

它適合你嗎?如果是的話,如果你能接受答案會很好。如果沒有,請讓我們知道缺少什麼。 –