在CMake中为第三方库设置解决方案文件夹属性
问题描述:
我的项目依赖于大型第三方库(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? 目前,我想花时间完成其他任务,并推迟将来进行简单编辑。
答
有一个'黑客'来实现你的目标。 “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。
从你自己的CMakeLists调用所有72个OpenMVG目标的'set_property'有什么问题?当然,这有点乏味,但你只需要做一次。 – ComicSansMS 2014-09-11 08:39:07
是的,没有错。已经这样做了。 – wl2776 2014-09-11 09:17:41