次のような 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 を見つけさせる方法です。