Miałem projekt, który używa CMake jako narzędzia do kompilacji i stworzył prosty szablon dla mnie i moich współpracowników do wykorzystania. Kiedy szukałem najlepszych i łatwych w użyciu praktyk online, natknąłem się na różne podejścia do tworzenia biblioteki.Dlaczego dodawać pliki nagłówkowe do polecenia ADD_LIBRARY/ADD_EXECUTABLE w CMake
W tym szablonie wymieniono pliki nagłówkowe i pliki źródłowe w dwóch oddzielnych zmiennych i nie przekazuję nagłówków do polecenia add_library
- tylko źródła. A następnie używam zmiennej set_target_properties
ze zmienną PUBLIC_HEADER
, aby podać listę plików nagłówkowych.
Do tej pory wydaje się działać, ale zastanawiam się, czy robię coś niepotrzebnie skomplikowane. Niektóre osoby w Internecie przekazują pliki nagłówkowe do polecenia add_library i nie używają nawet set_target_properties
i innych.
W skrócie:
- powinniśmy Dołącz nagłówek pliki
add_library
czy nie powinniśmy (jako najlepszej praktyki)? I wpływ obu zastosowań. - jaki jest cel obsługiwany przez dodanie nagłówków w add_library/add_executable? Wydaje się, że działają nawet bez niego (wydaje się tylko deklaracja i symbole). proszę potwierdzić ze zrozumieniem.
(Oto szablon mówię :)
cmake_minimum_required(VERSION 3.1.0)
project(lae CXX C)
set(CMAKE_CXX_STANDARD 14)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
set(SOURCE_FILES
...
)
set(HEADER_FILES
...
)
set(PRIVATE_HEADER_FILES
...
)
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
set(REQUIRED_LIBRARIES
...
)
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBRARIES})
SET_TARGET_PROPERTIES(
${PROJECT_NAME}
PROPERTIES
FRAMEWORK ON
SOVERSION 0
VERSION 0.1.0
PUBLIC_HEADER "${HEADER_FILES}"
PRIVATE_HEADER "${PRIVATE_HEADER_FILES}"
ARCHIVE_OUTPUT_DIRECTORY "lib"
LIBRARY_OUTPUT_DIRECTORY "lib"
OUTPUT_NAME ${PROJECT_NAME}
)
Podobało mi się sposób połączenia obu! Ponadto zobaczyłem rzecz, o której wspomniałeś (pliki projektu pomijają nagłówek), gdy opcja eksportu użyła Eclipse CDT. Myślę, że pozostanę przy twoim rozwiązaniu. Dzięki! –
Drugi sposób "instalacji" nie wydaje się działać, kiedy "nagłówki" dodane/nie dodane w add_library. Narzeka na 'nie określono celów, nie znaleziono pliku Makef' w czasie budowy. jakaś wskazówka? – parasrish
@parasrish Jeśli nie zdefiniujesz swoich nagłówków komendą SET_TARGET_PROPERTIES, ponieważ nie zdefiniujesz nagłówków, to nie będzie działać. Jeśli jednak SET_TARGET_PROPERTIES z "Publicznymi nagłówkami" są poprawnie ustawione, instalacja docelowa powinna działać poprawnie. –