Visual Studio + CMake的GLOB_RECURSE

时间:2012-12-05 15:16:03

标签: c++ visual-studio-2010 include cmake

我正在浏览一个项目,该项目的src目录类似于:

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

在A.cpp中,他们包括B.h:

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

在使用CMake生成的visual studio 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生成的解决方案与我手动创建的解决方案的区别,但我似乎无法找到它。

我的问题是,换句话说,如何在没有包含相对路径的情况下找到我的Bh作为使用CMake显示生成的解决方案,而不实际使用CMake(例如我的Visual Studio项目中的某些选项或配置) )。

1 个答案:

答案 0 :(得分:2)

使其有效的部分是

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

您的dir/目录已添加到包含目录中。在Visual Studio中,您需要转到C/C++->General->Additional Include Directories的项目属性并添加dir/