1. ホーム
  2. c++

[解決済み】CMakeでインクルードディレクトリを正しく追加する方法

2022-03-26 17:04:34

質問

1年ほど前、私は次のような質問をしました。 ヘッダーの依存性 .

最近気づいたのですが、どうやらCMakeがこれらのヘッダーファイルを 外部 をプロジェクトに追加しました。少なくとも、Code::Blocksプロジェクトを生成するとき、ヘッダーファイルはプロジェクト内に表示されません(ソースファイルは表示されます)。したがって、CMakeはこれらのヘッダを次のように考えているようです。 外部 をプロジェクトに追加し、依存関係で追跡しないようにしました。

CMake のチュートリアルで検索しても、次のようなものしかヒットしません。 include_directories というのは、私の希望通りにはいかないようです...。

特定のディレクトリに含まれるべきヘッダーがあり、それらのヘッダーが生成されたMakefileによって追跡されるべきであることをCMakeに知らせる適切な方法は何でしょうか?

どのように解決するのですか?

2つのことが必要です。

まず、インクルードするディレクトリを追加します。

target_include_directories(test PRIVATE ${YOUR_DIRECTORY})

をサポートしていない非常に古い CMake バージョン (2.8.10 またはそれ以前) で行き詰っている場合、以下のようにします。 target_include_directories を使用することもできます。 include_directories の代わりに

include_directories(${YOUR_DIRECTORY})

それから、例えば現在のターゲットのソースファイルのリストにヘッダーファイルも追加する必要があります。

set(SOURCES file.cpp file2.cpp ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)
add_executable(test ${SOURCES})

こうすることで、ヘッダーファイルはMakefileの依存ファイルとして表示され、また、例えばVisual Studioプロジェクトを生成した場合、そのプロジェクトにも表示されるようになります。

それらのヘッダーファイルを複数のターゲットに使用する方法。

set(HEADER_FILES ${YOUR_DIRECTORY}/file1.h ${YOUR_DIRECTORY}/file2.h)

add_library(mylib libsrc.cpp ${HEADER_FILES})
target_include_directories(mylib PRIVATE ${YOUR_DIRECTORY})
add_executable(myexec execfile.cpp ${HEADER_FILES})
target_include_directories(myexec PRIVATE ${YOUR_DIRECTORY})