Aug. 20, 2019, 7:11 a.m.

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

cmake, Qt, C++

Добрый день.

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

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

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

Делаю так:

include_directories(../../src)

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
10

Добрый день.
Есть 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".

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

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

Вот пример

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)

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

  • Aug. 20, 2019, 8:14 a.m.
  • The answer was marked as a solution.

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

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)
...

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

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
How to become an author?

Contribute to the evolution of the EVILEG community.

Learn how to become a site author.

Learn it
Donate

Good day, Dear Users!!!

I am Evgenii Legotckoi, developer of EVILEG. And it is my hobby project, which helps to learn programming another programmers and developers

If the site helped you, and you want also support the development of the site, than you can donate by following ways

PayPalYandex.Money
Timeweb

Let me recommend you the excellent hosting on which EVILEG is located.

For many years, Timeweb has been proving his stability.

For projects on Django I recommend VDS hosting

View Hosting Timeweb
June 6, 2020, 12:20 a.m.
Aleksej

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:60points,
  • Rating points-1
June 6, 2020, 12:15 a.m.
Aleksej

C++ - Test 001. The first program and data types

  • Result:53points,
  • Rating points-4
V
June 5, 2020, 5:47 p.m.
Vladzo

C++ - Test 005. Structures and Classes

  • Result:83points,
  • Rating points4
Last comments
June 5, 2020, 11:52 a.m.
progammist

Распознавание изображений на Python с помощью TensorFlow и Keras

Огромное спасибо за метериал, по-больше бы подобных статей (с подробным описанием работы и примерами применения) на тему современных технологий. Вопрос поразмышлять. На текущий момент реал…
June 5, 2020, 2:39 a.m.
Evgenij Legotskoj

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

По-моему, смысла в этом нет особого. Если делегат будет игнорировать настройки таблицы, то это приведёт ещё к большему непониманию, что вообще происходит, для программиста, который после вас буд…
June 5, 2020, 2:34 a.m.
IscanderChe

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

Сижу, размышляю: можно ли переписать делегата так, чтобы независимо от настроек строк выделялись строки?
June 5, 2020, 2:31 a.m.
Evgenij Legotskoj

Qt/C++ - Tutorial 091. How to write a custom delegate controlling the highlighting of a row in a table

Понятно. Я не обратил внимания на то, что там было в старом коде по настройкам строк :)
Now discuss on the forum
s
June 6, 2020, 2:54 a.m.
shuric

Qt/C++ Определение положения курсора над действие(кнопкой) в QToolBar

Доброго дня. Возник вопрос - как можно определить что курсор находится над определенным действием(кнопкой) в qtoolbar ? mainwindow.cpp MainWindow::MainWi…
s
June 6, 2020, 1:45 a.m.
shuric

Qt/C++ особенности QProxyStyle

Да, Вы правы. Код был скопирован с сайта (уже не помню с какого), но решил пойти по пути более легком. Пришлось переписать - кому интересно: использовал stackedWidget для пе…
June 6, 2020, 12:08 a.m.
Aleksej

Посоветуйте новичку (базы данных и Qt, что учить)

Блин, а я недавно купил Шлее Qt 5.10 :( С детства хотел стать программистом, баловался Паскалем, писал простенькие программки на Delphi, создавал движок на php, изучал C (забросил и перешел на п…
June 5, 2020, 2:09 p.m.
IscanderChe

QPlainTextEdit настройка цвета фона

Вечер добрый. Пытаюсь настроить цвет фона QPlainTextEdit следующим образом: CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent){ ... QPalette::ColorRole role = bac…
June 5, 2020, 7:13 a.m.
IscanderChe

Фильтр для QtableView sql

Добрый день. Для такой фильтрации необходимо использовать QSortFilterProxyModel. В оффдоках есть хороший пример.
About
Services
© EVILEG 2015-2020
Recommend hosting TIMEWEB