写Makefile(二)

本文通过一个具体的Makefile实例,介绍了如何为多个源文件构建目标文件,并探讨了当项目源文件增多时,如何提高Makefile的可读性和维护性。

 在写Makefile(一)中,提供了一个简单的书写Makefile的例子,这个例子再简单不过了。后面我们将继续提供一个稍微复杂的例子。

 

现在源文件有三个,main.cpp,tdes.cpp和tdes.h,Makefile内容如下:

由于是C++代码,用到了编译选项-AA,还想用gdb调试,用到了-g选项。
使用上面的Makefile,可以在DEFS后面定义一些选项和宏,在INCLUDES中定义一些头文件的包含目录,在LIBS后面指定要链接的库文件。

但是现在还有一个问题,对于每个.cpp文件,都要编写一个.o和.cpp文件的依赖规则和编译命令,如果源文件随着项目的增大有很多,几十个甚至上百个,那么按照这样写出来的Makefile将非常不具有可读性和维护性。

Fortran编Makefile通常用于自动化构建过程,特别是在没有内置构建工具的旧式Fortran项目中。Makefile是一个文本文件,其中包含了描述如何从源代码生成目标进制文件或者其他依赖项规则的指令。在Fortran中,创建Makefile的一般步骤包括: 1. **目标定义**:首先,你需要定义项目的主要目标,如`.o`文件或最终的可执行文件,例如`main.o : main.f90`。 2. **依赖关系**:列出每个目标文件依赖于哪些源文件和其他已编译的模块,如`main.o : main.f90 utils_mod.mod`。 3. **规则**(Rules):定义编译和链接规则。对于Fortran,常见的规则可能如下: - `%.o : %.f90`:表示编译F95/Fortran 90源文件到目标对象文件。 - `all : $(OBJECTS)`:指定当运行`make all`时,所有目标文件应被构建。 - `clean :`:定义清理规则,删除编译后的中间产物,比如`rm *.o main`. 4. **编译器路径和选项**:可能需要指定使用的Fortran编译器(如gfortran),例如`FC = gfortran`,以及编译选项,如 `-c` 表示编译阶段,`-o` 指定输出目标文件等。 5. **调用规则**:如果项目有链接依赖,还需要定义链接规则,如`program : main.o lib_module.a`,假设`lib_module.a`是库文件。 ```makefile FC = gfortran OBJECTS = main.o utils.o main.o : main.f90 $(FC) -c $(FCFLAGS) main.f90 utils.o : utils.f90 $(FC) -c $(FCFLAGS) utils.f90 program : $(OBJECTS) $(FC) -o program $(OBJECTS) $(LDFLAGS) clean : rm -f *.o program ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值