2012-12-05 3 views
1

나는 비슷한 src 디렉토리를 가지고 프로젝트를 탐색 해요 :비주얼 스튜디오 + CMake의 GLOB_RECURSE

src/ 
|-- A.cpp 
|-- dir/ 
|-- |-- B.h 
|-- |-- B.cpp 
가 같은 BH 포함 A.cpp에서

: 비주얼 스튜디오에서

// In A.cpp: 
#include "B.h" 

을 CMake로 생성 된 2010 솔루션은 잘 컴파일되며 충돌이 없습니다. 그러나, 내가 CMake가 아닌 수동으로 만든 새로운 프로젝트를 만들고 위의 내용을 포함하면 VS가 B.h를 찾지 못합니다. 즉 다음 CMake 파일

// In A.cpp (non-CMake project version) 
#include "B.h" // Error: File not found (VS does not search the 
       //sub-directory when name is surrounded by ""). 
#include "dir/B.h" // Works: sub-directory specified. 

을 (내가 틀렸다면 위의 작품은, 저를 수정하시기 바랍니다 이유는 가정) GLOB_RECURSE를 사용하며, 이런 식으로 뭔가 보이는 단순화

:

cmake_minimum_required (VERSION 2.6) 

project (cmake_test) 

file(GLOB_RECURSE lib_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp *.h) 

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR} 
    ${CMAKE_CURRENT_SOURCE_DIR}/dir 
) 

add_library(lib STATIC 
    ${lib_SRCS} 
) 

target_link_libraries(lib) 

을 나는 CMake에 의해 생성 된 솔루션과 내가 수동으로 생성 한 솔루션의 차이점을 조사해 왔지만 찾을 수없는 것 같습니다.

내 질문에, 어떻게 상대적인 경로없이 내 Bh 찾기 솔루션을 포함 CMake 표시, CMake 실제로 사용하지 않고 (내 Visual Studio에서 일부 옵션이나 구성에 의해 포함 된 수행 할 수 있습니다. 계획). 이 작업을하게

답변

2

부분은 귀하의 dir/ 디렉토리가 포함 디렉토리에 추가됩니다

include_directories(
    ${CMAKE_CURRENT_SOURCE_DIR} 
    ${CMAKE_CURRENT_SOURCE_DIR}/dir 
) 

입니다. Visual Studio에서 프로젝트 속성 인 C/C++->General->Additional Include Directories으로 이동하고 dir/을 추가해야합니다.

+0

답변 해 주셔서 감사합니다. 그건 내 자신의 로컬 프로젝트에 대한 해결하지만 어떤 이유로 그들이 이미 파일을 찾을 수 없다는 주장 (이미 기존의 추가 포함 디렉토리)와 같은 방식으로 자신의 프로젝트에 파일을 추가 할 때. 내 파일과 파일은 모두 "maps /"라는 디렉토리에 있으며 C/C++ -> General-> 추가 포함 디렉토리에 추가됩니다. 왜 이런 일이 일어날 지 아십니까? – Andreas

+0

지도는 어디에 있습니까? src/maps? src/dir? 이 경우 "../dir"및 "../maps"를 추가하여 맵과 디렉토리의 파일을 서로 찾을 수 있습니다. 좋은 테스트는 include 파일에 전체 경로를 추가하고 이것이 작동하는지 확인한 다음 상대 경로 지정을 사용하여 최상의 결과를 얻는 방법을 알아낼 수 있습니다. – jcopenha

+0

감사합니다, 작동하는 것 같습니다. – Andreas