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
相关推荐
woshilys4 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛34 分钟前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程1 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Michaelwubo3 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07133 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<3 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟3 小时前
centos-stream9系统安装docker
linux·docker·centos
XH华3 小时前
初识C语言之二维数组(下)
c语言·算法
好像是个likun3 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器
超爱吃士力架3 小时前
邀请逻辑
java·linux·后端