2012-12-05 82 views
1

我瀏覽它具有類似於src目錄項目:的Visual Studio +的CMake的GLOB_RECURSE

src/ 
|-- A.cpp 
|-- dir/ 
|-- |-- B.h 
|-- |-- B.cpp 

在A.cpp它們包括了Bh這樣:

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

在Visual Studio用CMake生成的2010解決方案編譯得很好,並且沒有衝突。但是,如果我製作一個新項目(不是來自CMake,而是手動)並執行上述的包含,VS將不會找到B.h.即:

// 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. 

CMake的文件使用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生成的解決方案與我手動創建的解決方案的區別,但我似乎無法找到它。換句話說,我的問題是,我如何能夠完成VS找到我的Bh,而沒有使用CMake顯示生成的解決方案包含相對路徑,而沒有實際使用CMake(比如通過Visual Studio中的某些選項或配置項目)。

回答

2

,使得它的工作部分是

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

dir/目錄添加到include目錄。在Visual Studio中,您需要前往項目屬性C/C++->General->Additional Include Directories並添加dir/

+0

感謝您的回答;這爲我自己的本地項目解決了這個問題,但由於某種原因,當我以與他們相同的方式將文件添加到他們的項目中時(它已經預先存在額外的包含目錄),它再次聲稱找不到該文件。我的文件和它們的文件都在一個名爲「maps /」的目錄中,該目錄被添加到您描述的C/C++ - > General-> Additional Include Directories中。任何想法爲什麼會發生? – Andreas

+0

地圖在哪裏? SRC /地圖?和src/dir?在這種情況下,你會想添加「../dir」和「../maps」,這樣地圖和目錄中的文件就可以找到對方。一個好的測試是將完整路徑添加到包含文件中,並查看是否有效,然後可以計算出如何最好地使用相對路徑來使事情發揮作用。 – jcopenha

+0

謝謝,似乎工作。 – Andreas