約1年前に私はCMake のヘッダー依存関係。
最近、CMake がこれらのヘッダー ファイルをプロジェクトの外部にあると見なしていることが問題であるようだと気付きました。少なくとも、Code::Blocks プロジェクトを生成する場合、ヘッダー ファイルはプロジェクト内に表示されません (ソース ファイルは表示されます)。したがって、CMake はこれらのヘッダーをプロジェクトの外部にあると見なし、依存関係で追跡しないようです。
CMake チュートリアルで簡単に検索したところ、include_directories
私が望んでいることが行われていないことが示されただけです...
特定のディレクトリにインクルードするヘッダーが含まれており、生成された Makefile によってそれらのヘッダーを追跡する必要があることを CMake に通知する適切な方法は何ですか?
ベストアンサー1
二つのことを行わなければなりません。
まず、含めるディレクトリを追加します。
target_include_directories(test PRIVATE ${YOUR_DIRECTORY})
をサポートしていない非常に古い CMake バージョン (2.8.10 以前) を使用している場合はtarget_include_directories
、代わりに legacy を使用することもできます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})