在CMake中为第三方库设置解决方案文件夹属性

时间:2014-09-11 08:04:26

标签: visual-studio cmake

我的项目依赖于大型第三方库(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? 目前,我想把时间花在其他任务上,并推迟这个简单的编辑以备将来使用。

1 个答案:

答案 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。

相关问题