a.cpp
библиотеки Qt
? (в a.cpp #include <QDebug.h>
не находит файл)#include "../a/a.h"
на #include "a.h"
)Проект пустой, который создается по умолчанию (в формате qmake).
Структура проекта
+ cmakeTest
- CMakeLists.txt
+ test
- CMakeLists.txt
- main.cpp
- mainwindow.h
- mainwindow.cpp
- mainwindow.ui
+ a
- CMakeLists.txt
- a.h
- a.cpp
cmakeTest/CMakeLists.txt
cmake_minimum_required(VERSION 3.15.0)
project(cmakeTest)
add_subdirectory(test)
add_subdirectory(a)
cmakeTest/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
main.cpp
)
add_executable(helloworld WIN32 ${test_SRCS})
# Use the Widgets module from Qt 5
target_link_libraries(helloworld Qt5::Widgets aLib)
cmakeTest/a/CMakeLists.txt
cmake_minimum_required(VERSION 3.15.0)
set(a_SRCS
a.cpp
)
add_library(aLib STATIC ${a_SRCS})
cmakeTest/test/mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "../a/a.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
A a;
}
MainWindow::~MainWindow()
{
delete ui;
}
cmakeTest/a/a.cpp
#include "a.h"
#include <iostream>
//#include <QDebug.h> // не находит =(
A::A()
{
std::cout << "class A" << std::endl;
}
UDP: Решение
cmakeTest/a/CMakeLists.txt
cmake_minimum_required(VERSION 3.15.0)
find_package(Qt5Widgets)
include_directories(${Qt5Widgets_INCLUDE_DIRS})
set(a_SRCS
a.cpp
a.h
)
add_library(aLib STATIC ${a_SRCS})
cmakeTest/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)
# Use the Widgets module from Qt 5
target_link_libraries(helloworld Qt5::Widgets aLib)
1) вы не можете в cpp файл добавить библиотеку - #include это директива препроцессора и для того, чтобы она верно работала нужно либо указывать полный путь к хидеру (плохой вариант), либо указать компилятору где его искать. В cmake это делается указанием target_include_directories. В случае с qt достаточно указать target_link_libraries с соответствующим модулем.
2) смотрите первый
3) смотрите официальную документацию. Есть ещё методичка на русском: Дубров "система построения проектов cmake"
Нужно посчитать количество единичных бит, запрещается использовать любые арифметические операции (даже инкремент) и любые сторонние библиотеки...
Продолжение изучения CMake: Как добавить qt классы в подпроект?Теперь необходимо без корневого файла CMakeLists
Как ввести массив E[N][N] с клавиатуры? получилось только определить с помощью #define