2012-12-05 84 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