Linux下C程序的编写

Linux下C程序的编写

第一部分:编写C程序并使用gcc编译器

首先,我们编写一个简单的C程序hello_gcc.c,用于在屏幕上输出"Hello gcc!"。

c 复制代码
// hello_gcc.c  
#include <stdio.h>  
  
int main() {  
    printf("Hello gcc!\n");  
    return 0;  
}

然后,我们可以使用gcc编译器并带上不同的选项来观察生成的文件。

  1. 编译并生成可执行文件(不使用中间文件):
bash 复制代码
gcc hello_gcc.c -o hello_gcc
  1. 编译并生成预处理文件(.i):
bash 复制代码
gcc -E hello_gcc.c -o hello_gcc.i
  1. 编译预处理文件并生成汇编文件(.s):
bash 复制代码
gcc -S hello_gcc.i -o hello_gcc.s  
# 或者直接使用源文件,gcc会先预处理再生成汇编文件  
gcc -S hello_gcc.c -o hello_gcc.s
  1. 编译汇编文件并生成目标文件(.o):
bash 复制代码
gcc -c hello_gcc.s -o hello_gcc.o  
# 或者直接从源文件编译到目标文件  
gcc -c hello_gcc.c -o hello_gcc.o
  1. 链接目标文件并生成可执行文件:
bash 复制代码
gcc hello_gcc.o -o hello_gcc

(注意:在实际操作中,通常不会单独编译汇编文件,而是直接从源文件编译到目标文件。)

第二部分:编写包含多个文件的C程序并编写Makefile

接下来,我们编写一个包含头文件greeting.h、自定义函数文件greeting.c和主函数文件myapp.c的C程序。

greeting.h(头文件):

c 复制代码
// greeting.h  
#ifndef GREETING_H  
#define GREETING_H  
  
void print_greeting();  
  
#endif // GREETING_H

greeting.c(自定义函数文件):

c 复制代码
// greeting.c  
#include <stdio.h>  
#include "greeting.h"  
  
void print_greeting() {  
    printf("Hello from greeting.c!\n");  
}

myapp.c(主函数文件):

c 复制代码
// myapp.c  
#include "greeting.h"  
  
int main() {  
    print_greeting();  
    return 0;  
}

然后,我们编写一个Makefile文件来管理这些文件的编译过程。

Makefile

makefile 复制代码
# Makefile  
CC=gcc  
CFLAGS=-Wall  
  
TARGET=myapp  
SOURCES=$(wildcard *.c)  
OBJECTS=$(SOURCES:.c=.o)  
  
all: $(TARGET)  
  
$(TARGET): $(OBJECTS)  
 $(CC) $(CFLAGS) -o $@ $^  
  
%.o: %.c  
 $(CC) $(CFLAGS) -c $< -o $@  
  
clean:  
 rm -f $(OBJECTS) $(TARGET)

在这个Makefile中,我们定义了编译器(CC)、编译选项(CFLAGS)、目标文件(TARGET)、源文件(SOURCES)、目标文件列表(OBJECTS)。我们还定义了allclean两个目标,分别用于编译和清理生成的文件。

要使用这个Makefile,只需在终端中进入包含Makefile的目录,并运行make命令即可编译程序。要清理生成的文件,可以运行make clean命令。

编译程序:

bash 复制代码
make

执行程序:

bash 复制代码
./myapp

清理生成的文件:

bash 复制代码
make clean
相关推荐
磊灬泽35 分钟前
【日常错误】鼠标无反应
linux·windows
知白守黑26739 分钟前
Ansible角色
运维·服务器·ansible
Jwest202139 分钟前
工业显示器在地铁电力监控与运维中的应用
运维·计算机外设
鹿鹿学长4 小时前
2025年全国大学生数学建模竞赛(C题) 建模解析|婴儿染色体数学建模|小鹿学长带队指引全代码文章与思路
c语言·开发语言·数学建模
伴杯猫4 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
Miracle&5 小时前
2.TCP深度解析:握手、挥手、状态机、流量与拥塞控制
linux·网络·tcp/ip
专注API从业者5 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
Ribou5 小时前
Ubuntu 24.04.2安装k8s 1.33.4 配置cilium
linux·ubuntu·kubernetes
Want5956 小时前
C/C++圣诞树①
c语言·开发语言·c++
tan180°6 小时前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎