При условии, что в описанном проекте только заголовочные файлы в каталоге mylib/include
должны считаться общедоступными:
Верхний уровень CMakeLists.txt
для mylib
должен содержать:
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
project(mylib VERSION 0.1 LANGUAGES CXX)
add_library(${MyLibName} ${MyLib_SOURCES})
target_include_directories(${MyLibName}
PUBLIC
$<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
Это гарантирует, что проекты, включающие mylib
, будут иметь доступ только к файлам в каталоге include/
.Файлы в include/
могут использоваться как #include <myfile.h>
, а файлы в include/mylib
(общее соглашение) могут использоваться как #include <mylib/myfile.h>
.
Верхний уровень CMakeLists.txt
для myapp
должен включать:
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
project(myapp VERSION 0.1 LANGUAGES CXX)
add_subdirectory(libs/mylib)
add_executable(${MyAppName} ${MyApp_SOURCES})
target_link_libraries(${MyAppName} ${MyLibName}
Использование add_subdirectory
гарантирует, что mylib
будет построен до myapp
и target_link_libraries
добавляет mylib
к исполняемому файлу.
Как упомянуто Цалумэномубедитесь, что вы изучили учебники CMake и предпочитаете использовать cmake --build .
вместо make
.