14

CMake でコマンド-Iを使用してインクルード パス ( ) を設定するのに問題があるようです。include_directories()私のプロジェクトディレクトリは次のとおりです。

Root
| - CMakeLists.txt
| - libs
| - | - CMakeLists.txt
| - | - inc
| - | - | - // lib specific includes
| - | - src
| - | - | - // lib specific sources
| - proj1
| - | - CMakeLists.txt
| - | - inc
| - | - | - // proj1 specific includes
| - | - src
| - | - | - // proj1 specific sources

ルートCMakeLists.txtファイルは次のようになります。

project(ROOT)
add_subdirectory(libs)
add_subdirectory(proj1)

以下のCMakeLists.txtファイルlibs:

project(lib)
add_library(lib STATIC ${lib_hdrs} ${lib_srcs}) // for conciseness, omitted set() 

そして最後に、CMakeLists.txt以下のファイルproj1:

project(proj1)

include_directories("${ROOT_SOURCE_DIR}/lib/inc") # <- problem line?

add_executable(proj1 ${proj1_srcs})
target_link_libraries(proj1 lib)

目標は、libs のソース ファイルとヘッダー ファイルからライブラリを作成し、proj1 で生成された実行可能ファイルにリンクすることです。Proj1 には#include、libs に含まれるファイルがいくつかあるため、 で使用するディレクトリを追加する必要があり-Iます。ドキュメントに基づいて、それがinclude_directories()すべきことです。ただし、それを明示的に設定して debugを実行message(${INCLUDE_DIRECTORIES})しても、INCLUDE_DIRECTORIES変数は空の文字列であり、インクルード パスにディレクトリが指定されていないため、proj1 のコンパイルは失敗します。

また、引用符を削除して、${ROOT_SOURCE_DIR}/incそれが役に立ったかどうかを確認しましたが、うまくいきませんでした。

4

1 に答える 1