Тема: Додавання власної бібліотеки через CMake
Мій проєкт має основний CMake файл і CMake файл в теці з власною бібліотекою.
Я розділив хедер і срр файл, поклавши їх у різні теки.
І тепер не можу імпортувати хедер до срр файлу, бо той його не бачить.
Структура бібліотеки така:
libs/utils/include/public/хедер
libs/utils/src/срр файл
Ось основний CMake:
cmake_minimum_required(VERSION 3.28 FATAL_ERROR)
project(Cube
VERSION 1.0.0
LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20 )
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_COLOR_DIAGNOSTICS ON)
find_package(OpenGL REQUIRED)
find_package(glfw3 3.4 REQUIRED)
find_package(GLEW REQUIRED)
find_package(glm REQUIRED)
set(LIBRARIES_DIR
${CMAKE_SOURCE_DIR}/libs/utils
)
foreach(dir ${LIBRARIES_DIR})
add_subdirectory(${dir})
endforeach()
set(SOURCE_SHADERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shaders)
set(RESOURCE_FILE_DESTINATION ${CMAKE_BINARY_DIR})
file(COPY ${SOURCE_SHADERS_DIR} DESTINATION ${RESOURCE_FILE_DESTINATION})
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} OpenGL::GL glfw glm::glm GLEW::GLEW my_opengl_libs)
# Цією командою можна зручно встановити бажаний стандарт [c++17, c++20, c++23]
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
# Цією командою можна легко додати дефайни, можна вписувати їх на місці
#target_compile_definitions(${PROJECT_NAME} PUBLIC _GLIBCXX_DEBUG)
# Цією командою виставляємо прапорці компілятору
target_compile_options(${PROJECT_NAME}
PUBLIC -Wall
-Wextra
-Wpedantic
-fsanitize=address,undefined,leak
-march=native
-g3
-Wconversion
-fstack-protector-strong
)
# Цією командою виставляємо прапорці лінкеру
target_link_options(${PROJECT_NAME}
PUBLIC
-fsanitize=address,undefined,leak
-g3
)
if(CMAKE_CXX_COMPILER_LOADED)
message(STATUS "Compiler path: ${CMAKE_CXX_COMPILER}")
message(STATUS "Compiler ID: ${CMAKE_CXX_COMPILER_ID}")
message(STATUS "Compiler version:
${CMAKE_CXX_COMPILER_VERSION}")
endif()
if (CMAKE_CXX_COMPILER_IMPORT_STD)
message(STATUS "Import std support.")
endif()
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 23)
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${PROJECT_NAME}
)
include(GNUInstallDirs)
install(TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)Ось додатковий з теки libs/utils:
cmake_minimum_required(VERSION 3.28 FATAL_ERROR)
project(my_opengl_libs)
find_package(glfw3 REQUIRED)
find_package(glm REQUIRED)
find_package(OpenGL REQUIRED)
set(SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/src/Utils.cpp
)
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/public)
target_link_libraries(${PROJECT_NAME}
OpenGL::GL
glfw
glm::glm
)Не знаю, чому не працює. На друкарські помилки перевірив — немає їх.