1

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

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

在 A.cpp 中,它们包括 Bh:

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

在使用 CMake 生成的 Visual Studio 2010 解决方案中,它编译得很好,并且不存在冲突。但是,如果我创建一个新项目(不是来自 CMake,而是手动)并按上述方式进行包含,VS 将找不到 BhIe:

// 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 生成的解决方案与我手动创建的解决方案的区别,但我似乎找不到它。

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

4

1 回答 1

2

使它工作的部分是

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

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

于 2012-12-05T15:21:22.630 回答