add_subdirectory добавить папку уровня выше

108
26 февраля 2021, 23:40

Продолжение изучения CMake: Как добавить qt классы в подпроект?. Теперь необходимо без корневого файла CMakeLists.txt собрать тот же проект.

+ root
    - CMakeLists.txt # не используя этот файл!!!
    + test
        - CMakeLists.txt # основа проекта тут!
        - main.cpp
        - mainwindow.h
        - mainwindow.cpp
        - mainwindow.ui
    + a
        - CMakeLists.txt
        - a.h
        - a.cpp

Варианты которые попробовал и которые не заработали отмечены #x, где x - номер попытки. Обе попытки вызывают ошибку.

root/test/CMakeLists.txt

cmake_minimum_required(VERSION 3.15.0)
project(test)
# 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 the QtWidgets library
find_package(Qt5 COMPONENTS Widgets REQUIRED)
set(test_SRCS
    mainwindow.ui
    mainwindow.cpp
    mainwindow.h
    main.cpp
)
add_executable(helloworld WIN32 ${test_SRCS})
target_include_directories(helloworld PUBLIC ../a)
add_subdirectory(../a) # 1
find_package(          # 2
    aLib               # 2
    PATHS ../a         # 2
    REQUIRED           # 2
    )                  # 2
# Use the Widgets module from Qt 5
target_link_libraries(helloworld Qt5::Widgets aLib)

Видимо, такое в cmake не одобряется.

UDP:
Если класс a является библиотекой(исходники), которая используется несколькими проектами, и для этой библиотеки есть код включения(a/CMakeLists.txt), как быть? копировать исходники в каждый используемый объект? Тогда возможно расхождение.

READ ALSO
Ввод двумерного массива с клавиатуры

Ввод двумерного массива с клавиатуры

Как ввести массив E[N][N] с клавиатуры? получилось только определить с помощью #define

96
Как конвертировать string в _bstr_t

Как конвертировать string в _bstr_t

Как string test конвертировать в _bstr_t c++

127
Как использовать static_assert для следующего фрагмента кода?

Как использовать static_assert для следующего фрагмента кода?

Есть вот такой пользовательский литералЯ бы хотел выкинуть предупреждение в случае если принимаемое значение не лежит в диапазоне 0

118
Парсинг большого файла (книги)

Парсинг большого файла (книги)

ПодскажитеПарсинг работает, но очень, очень долго

142