web-dev-qa-db-ja.com

CMakeでinclude_directoriesをリストする

私はたくさんの依存関係を探しているcmakeビルドを持っています、つまり、私は多くのインスタンスを持っています:

FIND_PACKAGE(SomePackage)
if(SOMEPACKAGE_FOUND)
  include_directories(${SOMEPACKAGE_INCLUDE_DIR})
  link_libraries(${SOMEPACKAGE_LIBRARIES})
endif(SOMEPACKAGE_FOUND)

次に、プリコンパイル済みヘッダーファイルを作成するカスタムコマンドを追加しますが、これを行うには、include_directories呼び出しによって追加されたすべてのパスを知る必要があります。これらのディレクトリのリストを(できれば適切な-I/path/to/directory形式で)取得して、カスタムコマンドに追加できるようにするにはどうすればよいですか?

52
rcv

Get_propertyコマンドを使用して、ディレクトリプロパティINCLUDE_DIRECTORIES

このようなもの:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
  message(STATUS "dir='${dir}'")
endforeach()

このディレクトリプロパティの値は、同じCMakeListsファイルで以前に発生した、または親CMakeListsファイルで以前に発生したものから継承されたinclude_directoriesコマンドのみを追跡します。 find_packageおよびinclude_directoriesコマンドが多くのサブディレクトリに散らばっている場合、これは難しい問題になります。

その時点まで到達したら、include_directoriesコマンドを独自の関数またはマクロでオーバーライドし、渡された値を自分で追跡することを検討してください。または、それらをinclude_directoriesの各呼び出しと一緒にグローバルプロパティまたは内部キャッシュ変数に単純に蓄積します。

こちらのドキュメントをご覧ください。

http://cmake.org/cmake/help/v2.8.8/cmake.html#command:get_property

http://cmake.org/cmake/help/v2.8.8/cmake.html#prop_dir:INCLUDE_DIRECTORIES

88
DLRdave

conan によってファイルに追加されたインクルードディレクトリを記述するソリューション

function(output_conan_include_dirs)
    set(include_dir_str "")
    foreach(DIR ${CONAN_INCLUDE_DIRS})
        set(include_dir_str "${include_dir_str}${DIR}\n")
    endforeach()

    set(pth "${CMAKE_BINARY_DIR}/conan-includes.txt")
    file(WRITE "${pth}" "${include_dir_str}")
    message(STATUS "Conan include directories written to: ${pth}")
endfunction()

output_conan_include_dirs()
1
radam