ToB企服应用市场:ToB评测及商务社交产业平台

标题: c语言的编译与调试 [打印本页]

作者: 涛声依旧在    时间: 2024-7-23 21:39
标题: c语言的编译与调试
1. GCC/G++

gcc和g++是GNU Compiler Collection中的编译器,分别用于编译C和C++程序。它们的编译过程主要包括四个步骤:预处理(Pre-Processing)、编译(Compiling)、汇编(Assembling)、链接(Linking)。
1.1 编译过程

可以一步完成所有过程:
  1. gcc hello.c -o hello
复制代码
大概只生成目标文件:
  1. gcc -c hello.c -o hello.o
复制代码
1.2 GCC基本使用

1.3 GCC常用选项

1.4 G++使用

g++用于编译C++程序,使用方法与gcc类似:
2.Makefile

Makefile 是用于主动化编译和构建软件项目的工具。在大型项目中,手动编译每个文件非常繁琐,使用 Makefile 可以简化这一过程。Makefile 由一系列规则(rules)组成,每个规则包含目标(target)、依赖(dependencies)和下令(commands)。
2.1 基本结构

一个基本的 Makefile 的规则结构如下:
  1. target: dependencies
  2.     command
复制代码
2.2 示例

假设有以下项目结构:
  1. project/
  2. ├── include/
  3. │   └── myheader.h
  4. ├── src/
  5. │   ├── main.c
  6. │   ├── file1.c
  7. │   ├── file2.c
  8. ├── Makefile
复制代码
Makefile 内容如下:
  1. # 指定编译器
  2. CC = gcc
  3. # 编译选项
  4. CFLAGS = -Wall -g -Iinclude
  5. # 源文件目录
  6. SRC_DIR = src
  7. # 所有的源文件
  8. SRCS = $(wildcard $(SRC_DIR)/*.c)
  9. # 生成的目标文件
  10. OBJS = $(SRCS:.c=.o)
  11. # 生成的可执行文件名
  12. TARGET = myprogram
  13. # 默认规则,生成最终的可执行文件
  14. all: $(TARGET)
  15. # 生成最终的可执行文件 $(TARGET),依赖所有目标文件 $(OBJS)
  16. $(TARGET): $(OBJS)
  17.         $(CC) -o $@ $^
  18. # 生成目标文件的规则
  19. $(SRC_DIR)/%.o: $(SRC_DIR)/%.c
  20.         $(CC) $(CFLAGS) -c $< -o $@
  21. # 清理规则
  22. clean:
  23.         rm -f $(OBJS) $(TARGET)
  24. # 打印文件列表
  25. print:
  26.         @echo "Source files: $(SRCS)"
  27.         @echo "Object files: $(OBJS)"
  28. # 伪目标
  29. .PHONY: all clean print
复制代码
2.3 变量

2.4 规则说明

<ul>all 规则
  1. all: $(TARGET)
复制代码
默认规则,生成目标文件 $(TARGET)。
$(TARGET) 规则
  1. $(TARGET): $(OBJS)
  2.     $(CC) -o $@ $^
复制代码
生成最终的可执行文件 $(TARGET),依赖所有目标文件 $(OBJS)。
模式规则
  1. $(SRC_DIR)/%.o: $(SRC_DIR)/%.c
  2.     $(CC) $(CFLAGS) -c $< -o $@
复制代码
通用规则,将 .c 文件编译为 .o 文件。$




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4