Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.01.2023
Сообщений: 35

CMake относительный путь к заголовочным файлам

04.10.2024, 11:24. Показов 894. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Как достичь следующего результата:
C++
1
2
3
4
//#include <lib/inc/some_file.hpp> Работает
#include <LibName/some_file.hpp> // Выдает ошибку 
 
int main() {}
Везде пишут использовать target_include_directories(${target_name } PRIVATE|PUBLIC|... ${dirs}).
Но эта команда не срабатывает и все равно приходится указывать директорию с хедерами, а хотелось бы использовать наименование библиотеки и заголовочный файл.


Структура проекта:

project
|-- bin/
|-- build/
|-- lib/
|-- src/
| |-- lib/
| | |-- inc/
| | | |-- some_file.hpp
| | |
| | |-- src/
| | | |-- some_file.cpp
| | |
| | |-- CMakeLists.txt [3]
| |
| |-- CMakeLists.txt [2]
| |-- main.cpp
|
|-- CMakeLists.txt [1]



CMakeLists.txt [1]:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cmake_minimum_required(VERSION 3.30)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_C_COMPILER
    "C:/Program Files/MinGW/13_2_0_win_64/bin/x86_64-w64-mingw32-gcc.exe")
set(CMAKE_CXX_COMPILER
    "C:/Program Files/MinGW/13_2_0_win_64/bin/x86_64-w64-mingw32-g++.exe")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
project(Test
        VERSION 0.1
        LANGUAGES CXX)
 
include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
    ${PROJECT_SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
    ${PROJECT_SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
    ${PROJECT_SOURCE_DIR}/${CMAKE_INSTALL_BINDIR})
 
add_subdirectory(src)

CMakeLists.txt [2]:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
add_executable(exe_file main.cpp)
               
add_subdirectory(lib)
 
target_compile_options(exe_file
                       PRIVATE
                         -Wall
                         -O3) 
 
target_link_libraries(exe_file
                      PRIVATE
                        -static
                        LibName)
 
target_include_directories(exe_file
                           PUBLIC
                             ${CMAKE_CURRENT_SOURCE_DIR})

CMakeLists.txt [3]:
C++
1
2
3
4
5
6
7
8
9
10
11
12
set(headers
    inc/some_file.hpp)
set(sources
    ${headers}
    src/some_file.cpp)
 
add_library(LibName STATIC ${sources})
 
target_include_directories(LibName
                           PUBLIC
                             ${CMAKE_CURRENT_SOURCE_DIR}
                             ${CMAKE_CURRENT_SOURCE_DIR}/inc)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.10.2024, 11:24
Ответы с готовыми решениями:

Как в CMake указать директорию, чтобы в программе можно было задавать относительный путь к файлам из этой директории?
main.cpp расположен по такому пути: /home/User/Документы/Project/src/app/app/main.cpp В main.cpp осуществляется работа с .csv файлом,...

Путь к заголовочным файлам
Есть необходимость систематизировать заголовочные файлы т.е. разложить их по разным папкам. Как правильно указать конкретные пути на поиск...

.htaccess и относительный путь к файлам
Всем привет, извиняюсь за много букв в теме, но напишу подробнее. Я начинающий программист, и вот решил написать свой мини скажем так...

1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
04.10.2024, 19:53
Лучший ответ Сообщение было отмечено Djadek как решение

Решение

Цитата Сообщение от Djadek Посмотреть сообщение
Как достичь следующего результата:
Наиболее простой способ: в директории LibName/inc создать папку LibName и переместить публичные хедеры библиотеки в нее.

То есть будет следующая структура
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
project
|-- bin/
|-- build/
|-- lib/
|-- src/
| |-- lib/
| | |-- inc/
| | | |--LibName/
| | |   |-- some_file.hpp
| | |
| | |-- src/
| | | |-- some_file.cpp
| | |
| | |-- CMakeLists.txt [3]
| |
| |-- CMakeLists.txt [2]
| |-- main.cpp
|
|-- CMakeLists.txt [1]
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2024, 19:53
Помогаю со студенческими работами здесь

Относительный путь к файлам файл не найден
public class Config { private final Properties properties = new Properties(); private final String wayConfig =...

навигация по заголовочным файлам
в общем я только начал изучать c дело в следующем, как проще всего ориентироваться в заголовочных файлах? например есть структура: ...

Как отделить класс и класс-наследник по заголовочным файлам?
У меня есть класс, и его наследник. Надо разделить по заголовочным файлам. Файлы .cpp и .h по отдельности class Person { ...

Как правильно прописывать относительный адрес к текстовым файлам?
добрый день. в папке лаба есть ещо двепапки как показано на рисунке в одной екзе файл в другой текстовые файлы(их много) как...

Записать в массив относительный путь с именем файла из папки(не зная полный путь папки)
Наверняка вопрос заезженный, но я не нашел(плохо искал) Нужно из вложенной папки, из директории, откуда запускается макрос вытащить имена...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru