2014-09-11 78 views
3

我的項目依賴於大型第三方庫(OpenMVG)。 目前尚未安裝。官方建築說明建議與add_subdirectory一起使用。在CMake中爲第三方庫設置解決方案文件夾屬性

因此我CMakeLists.txt包含以下行

add_subdirectory(${OpenMVG_DIR}/src "${CMAKE_BINARY_DIR}/openMVG") 
include_directories(${OpenMVG_INCLUDES}) 
add_executable(f_matching f_matching.cpp) 
target_link_libraries(f_matching ${OpenMVG_LIBS}) 

我的平臺是Visual Studio,並生成解決方案包含了頂級的72個項目。我想用FOLDER CMake屬性在層次結構中對其進行組織。例如,我想將所有OpenMVG的項目移到單獨的VS解決方案文件夾。

但是,正如CMake文檔所述,該屬性只能分配給目標,而不能分配給目錄。 我CMakeLists.txt包含

set_property(DIRECTORY ${OpenMVG_DIR}/src PROPERTY FOLDER OpenMVG) 

,但此行不執行任何操作,無解的文件夾出現。 我試圖通過在目標上設置FOLDER屬性來修改幾個OpenMVG的CMakeLists,這工作。

對於這種情況,是否有任何解決方法,而不需要從OpenMVG更改CMakeLists? 目前,我想花時間完成其他任務,並推遲將來進行簡單編輯。

+1

從你自己的CMakeLists調用所有72個OpenMVG目標的'set_property'有什麼問題?當然,這有點乏味,但你只需要做一次。 – ComicSansMS 2014-09-11 08:39:07

+0

是的,沒有錯。已經這樣做了。 – wl2776 2014-09-11 09:17:41

回答

0

有一個'黑客'來實現你的目標。 「add_library」的原始版本的前綴是下劃線,這樣你就可以重新實現頂層以這種方式「add_library」功能:但

set_property(GLOBAL PROPERTY USE_FOLDERS ON) 

# you need it to properly set variable from function() call 
set(target_list "" CACHE INTERNAL "target_list") 
function(add_library name) 
    message("Adding library ${name}") 
    set(target_list ${target_list} ${name} CACHE INTERNAL "target_list") 
    _add_library(${name} ${ARGN}) 
endfunction() 

# Your add_subdirectory() goes here 

set_target_properties(${target_list} PROPERTIES FOLDER "OpenMVG") 

當然,它不記錄,並沒有官方的,因爲我知道它作品,至少現在用CMake 2.8.12.2。

相關問題