私はプロジェクトの一部に、ライブラリへのインタフェースであるいくつかのヘッダを持つライブラリを作成しています。残りはライブラリ自体にプライベートなものです。その後、CMakeはライブラリのヘッダ位置の問題をテストします
add_library(${PROJECT_NAME} ${PROJECT_SOURCES} "${PROJECT_BINARY_DIR}/libversion.h")
add_library(my::lib ALIAS ${PROJECT_NAME})
target_include_directories(${PROJECT_NAME}
PRIVATE ${Boost_INCLUDE_DIRS}
PRIVATE ${PROJECT_BINARY_DIR} #to locate libversion.h
INTERFACE ${PUBLIC_INCLUDE_HEADERS}
)
そして、私のテスト対象:
add_executable(${TEST_NAME} ${TEST_SOURCES})
add_test(NAME LibTest COMMAND ${TEST_NAME})
target_link_libraries(${TEST_NAME}
PRIVATE ${Boost_LIBRARIES}
PRIVATE my::lib
)
しかし、これは私だけが私のパブリックインターフェイスをテストすることができますので、私のライブラリのCMAKEの一部は次のようになります。ライブラリを単体テストしたい場合は、プロジェクトの残りのヘッダへのアクセスを宣言するにはどうすればいいでしょうかlib
?現在のソースディレクトリ(すべてのヘッダーが現在存在し、プライベートヘッダーからパブリックを分離することはまだ処理していない別の問題です)としてインターフェイスを宣言する新しいターゲットmy::lib::testing
を追加することです。したがって、次のようなものがあります。
add_library(${PROJECT_NAME}_TESTING ${PROJECT_SOURCES} "${PROJECT_BINARY_DIR}/libversion.h")
add_library(my::lib::testing ALIAS ${PROJECT_NAME}_TESTING)
target_include_directories(${PROJECT_NAME}_TESTING
PRIVATE ${Boost_INCLUDE_DIRS}
PRIVATE ${PROJECT_BINARY_DIR} #to locate libversion.h
INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
)
しかし、これには用途に応じて2つの異なるターゲットが必要です。 1つは私のアプリケーションで別名my::lib
にリンクし、もう1つはユニットテストのためにエイリアスmy::lib::testing
をリンクしています。
だから私の質問ですが、私はきれいに別々のヘッダはので、私はターゲットによって示される唯一の私INTERFACE
ヘッダを持っているが、それでも私のテスト対象で、残りのヘッダにアクセスすることができますはどうすればよいですか?