2014-09-11 2 views
3

내 프로젝트는 제 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}) 

내 플랫폼은 비주얼 스튜디오입니다 다음 줄을 포함하고 생성 된 솔루션은 최고 수준의 72 개 프로젝트가 포함되어 있습니다. FOLDER CMake 속성을 사용하여 계층 적 수준으로 구성하고 싶습니다. 예를 들어, 모든 OpenMVG 프로젝트를 별도의 VS 솔루션 폴더로 이동하고 싶습니다.

그러나 CMake 문서에서 말하는 것처럼이 속성은 대상이 아닌 대상에만 할당 할 수 있습니다. 내 CMakeLists.txt

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

을 포함하지만,이 라인은 아무것도하지 않는다, 어떤 솔루션 폴더가 표시되지 않습니다. 대상에 FOLDER 속성을 설정하여 OpenMVG의 CMakeLists 몇 개를 수정하려고했습니다.

OpenMVG에서 CMakeLists를 변경하지 않고이 상황에 대한 해결 방법이 있습니까? 현재 저는 다른 작업을 위해 시간을 보내고 싶습니다. 앞으로이 간단한 편집을 연기하십시오.

+1

72 개 OpenMVG 타겟 모두에 대해 자신 만의 CMakeLists에서'set_property'를 호출하는 것이 잘못된 이유는 무엇입니까? 물론, 약간 지루하지만 한 번만해야합니다. – ComicSansMS

+0

예, 잘못되었습니다. 이미 그렇게 했어. – wl2776

답변

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.