20 августа 2019 г. 7:11

Как подключить в CMakeList.txt папку с исходниками?

cmake, Qt, C++

Добрый день.

В исходниках подключаю заголовочный файл:

#include "../../src/database.h"

Как теперь его подключить в CMakeList.txt ?

Делаю так:

include_directories(../../src)

Компилятор всё равно ругается на неопределённые переменные, которые указаны в database.h .

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
10
  • 20 августа 2019 г. 7:32

Добрый день.
Есть 2 варианта:
include_directories(../"path")
или после созданяи таргета
target_include_directories(${PROJECT_NAME} {PRIVATE, PUBLIC, INTERFACE} ../"path")
Правильнее использовать 2 вариант, так как он дает больше контроля и не даст доступа в определенных ситуациях наследования другим под проектам.
Если нужен пример какой то то пишите, кину что то из своего.

Пишу так:

target_include_directories(${PROJECT_NAME} ../../src)

При разборе CMakeList.txt появляется ошибка: "target_include_directories called with invalid arguments".

Да, пример хорошо бы.

  • 20 августа 2019 г. 7:45

А где приват или паблик?

  • 20 августа 2019 г. 7:51

Вот пример

cmake_minimum_required(VERSION 3.10)
project(test)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

set(DINAMIC_LIBS
        -ldl
        -lblkid
        -lrt
        )

set(SOURCE_FILES
        main.cpp
        )

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

target_link_libraries(${PROJECT_NAME} PUBLIC BOOST_LIBS)
target_link_libraries(${PROJECT_NAME} PUBLIC ${DINAMIC_LIBS})

target_compile_definitions(${PROJECT_NAME} PUBLIC "что то")

target_include_directories(${PROJECT_NAME} PRIVATE ./)

Добавил PUBLIC, ошибки при компиляции остались.

Вот полностью весь файл:

cmake_minimum_required(VERSION 3.0)
project(Test_Data)

set(CMAKE_CXX_STANDARD 11)

set(VERSION_MAJOR 0)
set(VERSION_MINOR 1)
set(VERSION_PATCH 0)
set(SOFT_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)

# включаем поиск библиотек с использованием find_package()
# через REQUIRED указываем, что библиотеки обязательны
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Sql REQUIRED)

set(SOURCE_FILES main.cpp)
add_executable(${PROJECT_NAME} ${SOURCE_FILES})

# указываем, какие библиотеки необходимо подключить
target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} Qt5::Gui)
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
target_link_libraries(${PROJECT_NAME} Qt5::Sql)

target_include_directories(${PROJECT_NAME} PUBLIC ../../src)

Ошибки при компиляции остались.

  • 20 августа 2019 г. 8:14
  • Ответ был помечен как решение.

Посмотриет вот этот пример с моего проекта. И проверте точно ли пусть что вы указали является правильным?

cmake_minimum_required(VERSION 3.10.0)
project(managetime)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

include_directories(sources)

find_package(Qt5Widgets         REQUIRED)
find_package(Qt5Qml             REQUIRED)
find_package(Qt5Quick           REQUIRED)
find_package(Qt5QuickWidgets    REQUIRED)
find_package(Qt5QuickControls2  REQUIRED)
find_package(Qt5Multimedia      REQUIRED)

set(REQUIRED_LIBS
        Qt5::Qml
        Qt5::Widgets
        Qt5::Quick
        Qt5::QuickWidgets
        Qt5::QuickControls2
        Qt5::Multimedia
)

qt5_add_resources(RCC_RESOURCES
        qml.qrc
        translations.qrc
        image.qrc
        audio.qrc
        )

set(SOURCE_FILES
        main.cpp
        sources/CircleTimer.cpp
        sources/qmltranslator.cpp
        sources/SystemTray.cpp
        sources/TimerContainer.cpp
        )

add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${RCC_RESOURCES})

target_link_libraries(${PROJECT_NAME} PUBLIC ${REQUIRED_LIBS})

Путь правильный. Исходники подключаемые в список исходников не добавил.

Так заработало:

...
include_directories(../../src)
...
set(SOURCE_FILES main.cpp ../../src/database.h ../../src/database.cpp)
...
  • 20 августа 2019 г. 8:34

И лучше отказатся от include_directories в польщу таргетовой реализации.
В моем примере проекта тоже не правильно, хоть и работает пока)

Да, с таргетом тоже работает. Спасибо!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Ищу работу?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы

ЮА
17 сентября 2019 г. 8:51
Юлия Александрова

C++ - Тест 001. Первая программа и типы данных

  • Результат:33баллов,
  • Очки рейтинга-10
ЮА
17 сентября 2019 г. 8:36
Юлия Александрова

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:10баллов,
  • Очки рейтинга-10
ВД
16 сентября 2019 г. 11:47
Виктор Дзенькив

C++ - Тест 002. Константы

  • Результат:75баллов,
  • Очки рейтинга2
Последние комментарии
17 сентября 2019 г. 6:07
Misha Lebedev

Кстати интересные темы нашёл тут https://emacsway.github.io/ru/django-framework/#django-models Может что полезного тоже Евгений найдёте
17 сентября 2019 г. 4:50
Misha Lebedev

Доброго времени суток. Спасибо за хороший ответ, У меня ситуация така что в галлереи будет несколько миллионов фотографий с фильтрами и тегами , и я опасаюсь за производительност . Это ос…
17 сентября 2019 г. 3:23
Евгений Легоцкой

Добрый день. Да, я тоже читал ту статью в своё время и согласен с тем, что внешние ключи гораздо лучше, чем GenericForeignKey. Выборки в ряде случае работают быстрее. Но лично мне про…
14 сентября 2019 г. 17:08
Misha Lebedev

Приветствую вас Евгений , давно наблюда за развитием вашего замечательного портала, много полезно тут нашел , переодически зачитываюсь. Теперь по сушеству, делаю портал и там идеально ложи…
10 сентября 2019 г. 16:38
Евгений Легоцкой

function view для модели Article и LikeDislike.LIKE будет выглядеть так def like(request, pk): obj = Article.objects.get(pk=pk) try: likedislike = LikeDislike.objects.get(cont…
Сейчас обсуждают на форуме
p
17 сентября 2019 г. 5:02
pstMem

Да, действительно нужно дебажить, по другому не словить исключение. Уже решил проблему, был выход за предел массива, не правильные входные данные, так что всегда проверяйте размер массива.
17 сентября 2019 г. 3:39
Евгений Легоцкой

Добрый день! На удалённом сервере вряд ли. Этот класс из core модуля, а удалённый сервер - это ещё и network модуль нужно подтягивать. Тут на удалэнном сервере нужно делать программу…
17 сентября 2019 г. 3:30
Евгений Легоцкой

Добрый день! Попробуйте toHex() А также создние QString с помощью from методов. Может быть QString::fromLatin1(). В документации на QString почти два десятка методов from, один из них…
m
16 сентября 2019 г. 13:54
mihamuz

Однозначно PostgreSql не ниже 10 ки.
R
16 сентября 2019 г. 7:09
RED_Spider

прочитайте https://doc.qt.io/archives/qt-5.11/osx-deployment.html QMAKE_POST_LINK += "~/Qt/5.12.0/clang_64/bin/macdeployqt $${TARGET}.app $$escape_expand( \\n\\t )"
EVILEG
О нас
Услуги
© EVILEG 2015-2019
Рекомендует хостинг TIMEWEB