如何在linux中使用Makefile构建一个C++工程?

环境为Fedora41,gcc 版本 14.2.1 20250110 (Red Hat 14.2.1-7) (GCC)

步骤1:安装必要的工具

首先确保系统已安装C++编译器和构建工具:

bash 复制代码
sudo dnf install gcc-c++ make

步骤2:创建工程目录结构

bash 复制代码
# 创建工程目录
mkdir cpp_project
cd cpp_project

# 创建源代码目录和构建目录
mkdir src build include

# 创建源代码文件
touch src/main.cpp
touch include/hello.h
touch src/hello.cpp

步骤3:编写代码

使用文本编辑器(如nano或vim)编写以下文件:

  1. include/hello.h 头文件:
cpp 复制代码
#ifndef HELLO_H
#define HELLO_H

void print_hello();

#endif
  1. src/hello.cpp 实现文件:
cpp 复制代码
#include <iostream>
#include "hello.h"

void print_hello() {
    std::cout << "Hello from C++ project!" << std::endl;
}
  1. src/main.cpp 主程序文件:
cpp 复制代码
#include "hello.h"

int main() {
    print_hello();
    return 0;
}
  1. 创建Makefile:
bash 复制代码
touch Makefile

编辑Makefile内容:

bash 复制代码
# 编译器设置
CXX = g++
CXXFLAGS = -std=c++11 -Iinclude -Wall

# 目标文件和可执行文件
TARGET = build/app
SRCS = src/main.cpp src/hello.cpp
OBJS = $(SRCS:.cpp=.o)

# 默认目标
all: $(TARGET)

# 链接
$(TARGET): $(OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $(OBJS)

# 编译
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 清理
clean:
	rm -f $(OBJS) $(TARGET)

# 运行
run: $(TARGET)
	./$(TARGET)

步骤4:编译和运行工程

bash 复制代码
# 编译工程
make
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a6f8bb0335704f6ea799e9ca92e137c5.png)

# 运行程序
make run

# 如果需要清理编译产物
# make clean

运行后,你应该能看到输出:

复制代码
Hello from C++ project!

工程结构说明

  • src/:存放所有源代码文件(.cpp)
  • include/:存放所有头文件(.h)
  • build/:存放编译生成的可执行文件
  • Makefile:用于自动化编译过程的脚本

这个结构适合小型到中型的C++项目,通过Makefile可以轻松管理编译过程,而不需要每次手动输入长长的编译命令。如果项目规模更大,可以考虑使用CMake等更强大的构建系统。

相关推荐
滴滴滴嘟嘟嘟.3 分钟前
嵌入式Linux驱动开发:蜂鸣器驱动
linux·运维·驱动开发
hit56实验室7 分钟前
腾讯云的运维笔记——从yum的安装与更新源开始
运维·笔记·腾讯云
梅见十柒24 分钟前
UNIX网络编程笔记:共享内存区和远程过程调用
linux·服务器·网络·笔记·tcp/ip·udp·unix
ajassi200028 分钟前
开源 C++ QT Widget 开发(八)网络--Http文件下载
网络·c++·开源
成都极云科技1 小时前
裸金属服务器与虚拟机、物理机的核心差异是什么?
运维·服务器·数据库
溯光笔记1 小时前
服务器内网穿透NPS搭建过程 - 服务端linux服务器 客户端windows系统 - 溯光笔记
linux·服务器·windows
Tipriest_1 小时前
C++ 中 ::(作用域解析运算符)的用途
开发语言·c++·作用域解析
2501_930124702 小时前
Linux之Shell编程(三)流程控制
linux·前端·chrome
Tipriest_2 小时前
求一个整数x的平方根到指定精度[C++][Python]
开发语言·c++·python
我命由我123452 小时前
Word - Word 查找文本中的特定内容
运维·经验分享·笔记·word·运维开发·文档·文本