私はCMakeを使ってLinuxでC++プロジェクトを開発しています。CMake - さまざまなターゲットの異なるディレクトリを含める?
私は2つのライブラリLibA
とLibB
を作成しています。私はLibA
とLibB
に同じインクルードディレクトリを持たせたくありません。 DirectoryA
を含めるようにLibA
しか設定できない方法はありますか?LibB
にはDirectoryB
が含まれていますか?
編集:
LibA
とLibB
両方が実行可能な、MyExe
に使用されます。 MyExeのソースコードに#include
LibA.h
とLibB.h
が含まれていると、含まれているヘッダーファイルをDirectoryA
とDirectoryB
が共存するMyExe
に含めることができないため、名前空間の競合が発生します。
これは可能ですか?
編集2:ここに私のCMakeLists.txt include_directories(含める)
add_library(LibA src/LibA.cpp include/LibA.h)
set_property(TARGET LibA PROPERTY INCLUDE_DIRECTORIES /opt/SomeLibrary2.0/include/)
target_link_libraries(LibA /opt/SomeLibrary2.0/lib/a.so /opt/SomeLibrary2.0/lib/b.so /opt/SomeLibrary2.0/lib/c.so)
add_library(LibB src/LibB.cpp include/LibB.h)
set_property(TARGET LibB PROPERTY INCLUDE_DIRECTORIES ${LIB_B_INCLUDE_DIRS})
target_link_libraries(LibB ${LIB_B_LIBRARIES})
add_executable(MyExe src/myexe.cpp)
target_link_libraries(MyExe LibA LibB)
しかし、私はまだエラーを取得していますです。 LibA.hはSomeLibraryのヘッダファイルが見つからないと言っていますか?
スプリットcmakeのファイル、それらを作りますサブディレクトリ。 – IdeaHat
ご意見ありがとうございます。私の元の質問は私の問題をよりよく反映するように更新されました。 – trianta2
'DirectoryAとDirectoryBのヘッダファイルをMyExeに共存させることはできません。これは名前空間の競合を引き起こすためです。IMHO設計上の問題です。矛盾を解決すると、奇妙なリンカエラーや予期しない実行時の動作が発生する可能性があります。 –