CMake

Материал из Записи-напоминании
Перейти к навигации Перейти к поиску

переменные

//set устанавливает пользовательскую переменную
set(SOURCES main.cpp version.cpp)
set(HEADERS version.h)
//встроенная переменная указания текущего пути (пути сборки)
${CMAKE_CURRENT_BINARY_DIR}
//встроенная переменная исходного пути (где лежит обрабатываемый CMakeLists.txt)
${CMAKE_CURRENT_SOURCE_DIR}

цели

//цель-бинарник с именем helloWorld, собирающийся из main.cpp
add_executable(helloWorld main.cpp)
//цель-библиотека с именем libBL, собирающийся из lib.cpp lib.h
add_library(libBL STATIC lib.cpp lib.h)
//цель-бинарник с именем binary, собирающийся из файлов, согласно переменным
add_executable(binary ${SOURCES} ${HEADERS})
//указания свойств к цели
set_target_properties(
    helloWorld PROPERTIES
    CXX_STARNDARD 11
    CXX_STARDARD_REQUIRED ON
)

шаблон .h.in

//взять шаблон конфигурационного .h.in, заменить значения переменных и сохранить как .h в директории сборки
configure_file(
    config.h.in
    ${CMAKE_CURRENT_BINARY_DIR}/config.h
)

линковка

//аналог "gcc -L ${CMAKE_CURRENT_BINARY_DIR}"
target_include_directories(
    configure
    PRIVATE
    ${CMAKE_CURRENT_BINARY_DIR}
)
//слинковать цель helloWorld с целью libBL
target_link_libraries(helloWorld libBL)
find_package(sumLib CONFIG REQUIRED)
target_link_libraries(mainLib SumLib::sumLib)

переход в дочерний CMakeLists.txt

add_subdirectory(lib)
find_package(sumLib CONFIG REQUIRED)

install

//при обработке цели sumLib создать структуру директорий
install(
    TARGETS sumLib EXPORT sumLibTargets
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib
    INCLUDES DESTINATION include
)
//скопировать файл(ы) в include
install(FILES sumLib.h DESTINATION include)
//экспорт namespace и создание конф.файл для родительской директивы find_package
install(
    EXPORT sumLibTargets
    FILE sumLibConfig.cmake
    NAMESPACE SumLib::
    DESTINATION lib/cmake/SumLib
)