CMake Testen einer Bibliothek, Header-Speicherort Problem

So mache ich Teil eines Projekts eine Bibliothek mit einigen Kopfzeilen, die die Schnittstelle zur Bibliothek darstellen, und die übrigen sind für die Bibliothek selbst privat. Für meine Bibliothek sieht der CMAKE-Teil folgendermaßen aus:

add_library(${PROJECT_NAME} ${PROJECT_SOURCES} "${PROJECT_BINARY_DIR}/libversion.h")
add_library(my::lib ALIAS ${PROJECT_NAME})

targ,et_include_directories(${PROJECT_NAME} 
    PRIVATE ${Boost_INCLUDE_DIRS}
    PRIVATE ${PROJECT_BINARY_DIR} #to locate libversion.h
    INTERFACE ${PUBLIC_INCLUDE_HEADERS}
    )

Und dann mein Testziel:

add_executable(${TEST_NAME} ${TEST_SOURCES})
add_test(NAME LibTest COMMAND ${TEST_NAME})

target_link_libraries(${TEST_NAME} 
    PRIVATE ${Boost_LIBRARIES}
    PRIVATE my::lib
    )

Aber dies erlaubt mir nur, meine öffentliche Schnittstelle zu testen. Wenn ich meine Bibliothek einem Komponententest unterziehen möchte, wie würde ich vorgehen, um den Zugriff auf die verbleibenden Header in project @ zu deklarierelib? Ich sehe es so, als würde man ein ganz neues Ziel hinzufügenmy::lib::testing, das die Schnittstelle als aktuelles Quellverzeichnis deklariert (wo sich alle Header befinden). Also so etwas wie das:

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}
    )

Aber dies erfordert zwei verschiedene Ziele, die abhängig von der Verwendung erstellt werden müssen. Eine für meine Anwendung, die auf alias @ verlinmy::lib und eine für Unit-Tests, Alias verknüpfenmy::lib::testing.

Also meine Frage ist, wie kann ichsaube separate Header, damit ich nur meine @ haben kaINTERFACEheader werden von Zielen angezeigt, greifen aber immer noch auf die verbleibenden Header von meinem Testziel zu?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage