gcc编译位于不同文件下的.c文件。

我在day2文件下创建了一个main.c函数,然后一个add文件夹,一个sub文件夹。其中add文件下有add_int.c,add_float.c,add.h;然后在sub文件夹中有sub_int.c,sub_float.c,sub.h文件。文件布局,这里先省略各种.o文件然后main.c的内容是:

#include <stdio.h>
#include "add.h"
#include "sub.h"
int main(void)
{
    int a = 10,b = 12;
    float x = 1.23456,y = 9.87654321;
    printf("int a+b IS:%d\n",add_int(a,b));
    printf("int a-b IS:%d\n",sub_int(a,b));
    printf("float x+y IS:%f\n",add_float(a,b));
    printf("float x-y IS:%f\n",sub_float(a,b));
    return 0;
}

add_int.c:

int add_int(int a,int b)
{
    return a+b;
}

add_float.c:

float add_float(float x,float y)
{
    return x+y;
}

add.h:

#ifndef __ADD_H
#define __ADD_H

extern int add_int(int a,int b);
extern float add_float(float x,float y);
#endif

sub_float.c:

float sub_float(float x,float y)
{
    return x-y;
}

sub_int.c:

int sub_int(int a,int b)
{
    return a-b;
}

sub.h:

#ifndef __SUB_H
#define __SUB_H

extern float sub_float(float x,float y);
extern int sub_int(int x,int y);
#endif#ifndef __SUB_H
#define __SUB_H

extern float sub_float(float x,float y);
extern int sub_int(int x,int y);
#endif

这样我们可以使用

gcc -o main1.out main.c -I ./add/ -I ./sub/ add/add_int.c add/add_float.c sub/sub_int.c sub/sub_float.c

其中main1.out是你生成的可执行文件的名字,然后 -I ./add/表示的是你的当前文件下的add文件下的一个路径。这里使用的-I是让编译器从add和sub下寻找相应的文件。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Makefile来编译不同路径下的.c和.h文件。下面是一个示例Makefile: ``` CC=gcc CFLAGS=-I./include SRC=./src OBJ=./obj BIN=./bin $(BIN)/myprogram: $(OBJ)/main.o $(OBJ)/helper.o $(CC) -o $@ $^ $(OBJ)/main.o: $(SRC)/main.c $(SRC)/helper.h $(CC) $(CFLAGS) -c $< -o $@ $(OBJ)/helper.o: $(SRC)/helper.c $(SRC)/helper.h $(CC) $(CFLAGS) -c $< -o $@ .PHONY: clean clean: rm -f $(OBJ)/*.o $(BIN)/myprogram ``` 在这个Makefile中,我们假设我们有一个名为myprogram的程序,它的源代码位于./src目录中,头文件位于./include目录中,目标文件应该被编译到./obj目录中,最终的可执行文件应该被放置在./bin目录下。 我们定义了一些变量,以便在后面的规则中使用。CC变量指定使用的编译器,CFLAGS变量指定编译选项,SRC变量指定源代码目录,OBJ变量指定目标文件目录,BIN变量指定可执行文件目录。 在这个Makefile中,我们定义了三个规则:myprogram、main.o、helper.o。myprogram规则指定了可执行文件应该由哪些目标文件组成。main.o和helper.o规则分别指定了如何编译文件和头文件,以及如何生成目标文件。 最后我们还定义了一个clean规则,用于删除生成的目标文件和可执行文件。 使用make命令来编译和链接程序: ``` $ make ``` 这将会自动编译所有的.c和.h文件,并将生成的目标文件和可执行文件存储到相应的目录中。 ``` $ make clean ``` 这将会删除所有生成的目标文件和可执行文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值