我的项目依赖于大型第三方库(OpenMVG)。
目前尚未安装。官方建筑说明建议将其与add_subdirectory
一起使用。
因此我的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? 目前,我想把时间花在其他任务上,并推迟这个简单的编辑以备将来使用。
答案 0 :(得分:1)
有一个' hack'实现你的目标。原始版' 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。