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 ディスプレイで生成されたソリューションとして含まれる相対パスなしで、実際に CMake を使用せずに (Visual Studio プロジェクトのオプションや構成などによって)、VS に Bh を見つけさせる方法です。

4

1 に答える 1

2

それを機能させる部分は

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

ディレクトリがインクルードdir/ディレクトリに追加されます。C/C++->General->Additional Include DirectoriesVisual Studio では、プロジェクト プロパティに移動して、 を追加する必要がありますdir/

于 2012-12-05T15:21:22.630 に答える