Quindi, sto facendo parte di un progetto una libreria con alcune intestazioni che sono l'interfaccia della libreria e le restanti sono private della libreria stessa. Così per la mia libreria la parte CMAKE assomiglia:CMake verifica una libreria, problema di localizzazione dell'intestazione
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}
)
E poi il mio obiettivo di prova:
add_executable(${TEST_NAME} ${TEST_SOURCES})
add_test(NAME LibTest COMMAND ${TEST_NAME})
target_link_libraries(${TEST_NAME}
PRIVATE ${Boost_LIBRARIES}
PRIVATE my::lib
)
Ma questo permette solo a me per testare la mia interfaccia pubblica. Se voglio testare la mia libreria, come potrei fare per dichiarare l'accesso alle restanti intestazioni nel progetto lib
? Il mio modo di vedere sarebbe di aggiungere un intero nuovo target, my::lib::testing
, che dichiara l'interfaccia come la directory di origine corrente (dove attualmente si trovano tutte le intestazioni, separare il pubblico dalle intestazioni private è un altro problema che devo ancora gestire). Quindi qualcosa di simile:
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}
)
Ma questo richiede due diversi obiettivi da costruire a seconda dell'utilizzo. Uno per la mia applicazione che collega all'alias my::lib
e uno per il test dell'unità, che collega l'alias my::lib::testing
.
Quindi la mia domanda è, come faccio modo pulito intestazioni separati, in modo che io possa avere solo i miei INTERFACE
intestazioni mostrate da obiettivi, ma ancora accedere le intestazioni rimanenti dal mio target di test?