一个简单的cmake实例

本文介绍了如何使用CMake管理一个包含Circle类的C++项目,从CMakeLists.txt的配置,到src目录下源文件的结构,展示了如何通过CMake找到并链接头文件。主要关注了main.cpp中的Circle类实例化和Area函数计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主目录
   |--- CMakeLists.txt
   |--- src
          |--- main.cpp
          |--- Circle.cpp
   |--- include
          |--- Circle.h

1.主目录CMakeLists.txt

# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.0)
# 项目名称
project(Test)
include_directories(./include)
file(GLOB_RECURSE EXTRA_FILES */*)
# 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
#FILE(GLOB SC_FILES "*.cpp" "*.h")
file(GLOB_RECURSE code_sources "src/*.cpp")
# 指定生成目标
#add_executable(${PROJECT_NAME} ${SC_FILES})
add_executable(${PROJECT_NAME} ${code_sources})

2.src文件夹中的main.cpp

#include <iostream>
#include "Circle.h"
using namespace std;

int main()
{
    Circle c(3);
    cout<<"Area="<<c.Area()<<endl;
    return 1;
} 

3.src文件夹中的Circle.cpp

#include "Circle.h"

Circle::Circle()
{
    this->r=5.0;
}

Circle::Circle(double R)
{
    this->r=R;
}

double Circle:: Area()
{
    return 3.14*r*r;
} 

4.include文件夹中的Circle.h

class Circle
{
private:
    double r;//半径
public:
    Circle();//构造函数
    Circle(double R);//构造函数
    double Area();//求面积函数
}; 
<think>好的,用户之前已经询问了关于CMake中autogen后缀和moc前缀的含义,现在他们想要一个Qt CMake实例。我需要提供一个简单但完整的例子,展示如何在CMakeLists.txt中配置Qt项目,特别是涉及到moc处理的部分。 首先,用户可能需要一个基础的示例,包含必要的Qt模块,比如Core和Widgets,因为这两个是最基本的。然后,确保在CMakeLists.txt中正确使用find_package来查找Qt6,并链接到目标。同时,要启用AUTOMOC,这样CMake会自动处理moc生成的文件,避免手动调用moc工具。 接下来,代码示例部分需要包含一个简单的Qt窗口程序,比如显示一个按钮。这样用户可以看到整个项目结构,包括头文件和源文件。要注意头文件中使用Q_OBJECT宏,这样moc才会生成必要的元对象代码。 另外,用户可能需要知道如何组织项目目录结构,以及构建和运行的命令。所以应该给出目录结构示例,并说明如何在命令行中使用cmake进行构建。 还要考虑用户可能的错误,比如忘记链接Qt模块或者没有启用AUTOMOC,导致编译错误。在注意事项中提醒这些点,帮助用户避免常见问题。 最后,总结整个示例的关键点,强调find_package、AUTOMOC和target_link_libraries的重要性,确保用户理解每个步骤的作用。</think>以下是一个使用 **Qt** 和 **CMake** 的完整项目实例,涵盖窗口创建、信号槽连接和构建配置。通过该示例,你可以理解如何组织 Qt 项目的 CMake 文件。 --- ### **项目结构** ``` MyQtApp/ ├── CMakeLists.txt # CMake 配置文件 ├── main.cpp # 主程序入口 └── include/ └── MyWindow.h # 自定义窗口类头文件 └── src/ └── MyWindow.cpp # 自定义窗口类实现 ``` --- ### **1. CMakeLists.txt** ```cmake cmake_minimum_required(VERSION 3.16) project(MyQtApp) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找 Qt6 核心库和窗口组件库 find_package(Qt6 COMPONENTS Core Widgets REQUIRED) # 添加可执行文件 add_executable(MyQtApp main.cpp include/MyWindow.h src/MyWindow.cpp ) # 设置头文件包含目录 target_include_directories(MyQtApp PRIVATE include) # 启用 Qt 的 AUTOMOC(自动生成 moc_*.cpp 文件) set_target_properties(MyQtApp PROPERTIES AUTOMOC ON AUTORCC ON AUTOUIC ON ) # 链接 Qt 库 target_link_libraries(MyQtApp PRIVATE Qt6::Core Qt6::Widgets ) ``` --- ### **2. 代码文件** #### **main.cpp** - 程序入口 ```cpp #include "MyWindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWindow window; window.show(); return app.exec(); } ``` #### **MyWindow.h** - 自定义窗口类头文件 ```cpp #pragma once #include <QWidget> #include <QPushButton> class MyWindow : public QWidget { Q_OBJECT // 必须包含 Q_OBJECT 宏以启用信号槽 public: MyWindow(QWidget *parent = nullptr); private slots: void onButtonClicked(); // 槽函数 private: QPushButton *button; }; ``` #### **MyWindow.cpp** - 窗口类实现 ```cpp #include "MyWindow.h" #include <QMessageBox> MyWindow::MyWindow(QWidget *parent) : QWidget(parent) { button = new QPushButton("点击我", this); connect(button, &QPushButton::clicked, this, &MyWindow::onButtonClicked); } void MyWindow::onButtonClicked() { QMessageBox::information(this, "提示", "按钮被点击了!"); } ``` --- ### **3. 构建与运行** #### 步骤 1:生成构建目录 ```bash mkdir build cd build cmake .. -DCMAKE_PREFIX_PATH=/path/to/Qt6/installation # 指定 Qt6 安装路径 ``` #### 步骤 2:编译项目 ```bash cmake --build . ``` #### 步骤 3:运行程序 ```bash ./MyQtApp ``` --- ### **关键点解析** 1. **`find_package`** 用于查找 Qt6 的核心库(`Core`)和窗口组件库(`Widgets`),确保 CMake 能定位到 Qt 的头文件和库路径。 2. **`AUTOMOC`** 启用后,CMake 会自动扫描头文件中的 `Q_OBJECT` 宏,生成 `moc_MyWindow.cpp` 文件(存放在构建目录的 `autogen` 子目录中),无需手动调用 `moc` 工具。 3. **信号槽连接** 示例中的 `connect` 函数将按钮的 `clicked` 信号与 `onButtonClicked` 槽函数绑定,点击按钮时会触发弹窗。 --- ### **注意事项** - 如果编译时报错 `undefined reference to vtable`,通常是因为未启用 `AUTOMOC` 或忘记添加 `Q_OBJECT` 宏。 - 确保 `CMAKE_PREFIX_PATH` 正确指向 Qt 的安装路径(例如 Windows 下可能是 `C:/Qt/6.5.0/mingw_64/lib/cmake`)。 - 若使用 Qt Creator,可直接导入此 CMake 项目,无需手动指定路径。 --- 通过这个示例,你可以快速上手 Qt + CMake 的基础开发流程!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值