makefile文件中.h文件的位置有关问题
makefile文件中.h文件的位置问题
在GNU/Linux书中对下面三个源文件写的makefile文件煞是看不懂。
/*源文件--helper.c*/
#include <stdio.h>
void printInfo(void){}
/*源文件--helper.h*/
void printInfo(void);
/*源文件--howdy.c*/
#include <stdio.h>
#include "helper.h "
int main(void){}
作者在写makefile文件中使用了下面规则:
howdy : howdy.o helper.o helper.h
gcc ......
howdy.o : howdy.c
gcc ......
helper.o : helper.c helper.h
gcc ......
==================================================================
我认为作为依赖的helper.h的位置是有问题的
(1)目标howdy中不用依赖helper.h。在连接过程中不用helper.h文件
(2)目标howdy.o要依赖helper.h文件。因为在修改helper.h后howdy.o需要重新修改
(3)目标helper.o不需要依赖helper.h文件
所以我认为下面的规则更合适一些:
howdy : howdy.o helper.o
gcc ......
howdy.o : howdy.c helper.h
gcc ......
helper.o : helper.c
gcc ......
============================================================
小弟刚学linux编程,对上面认识不到的地方大家见谅
------解决方案--------------------
Makefile里一般不写.h的。
编译的时,编译.cpp。会将.h就地插入进来,形成一个编译单元。
------解决方案--------------------
h 文件不参与连接,
但是编译时候还是需要的 .......
------解决方案--------------------
一般.h不写入到依赖里面,因为.h里面一般都是接口,如果系统分析、概要设计做的好的话,那么.h是不应该经常变化的,而且,项目只要稍微做大一点,就会有很多的.h文件,如果所有的.h文件都放在依赖列表会很长很乱,手工去写也容易出错。对于.h的依赖,一般是通过自动编译工具,自动生成依赖,然后编译。
对于很少变化的.h文件,万一有了变动,那么更好的选择是进行一次完全的rebuild,make clean;make all。
在GNU/Linux书中对下面三个源文件写的makefile文件煞是看不懂。
/*源文件--helper.c*/
#include <stdio.h>
void printInfo(void){}
/*源文件--helper.h*/
void printInfo(void);
/*源文件--howdy.c*/
#include <stdio.h>
#include "helper.h "
int main(void){}
作者在写makefile文件中使用了下面规则:
howdy : howdy.o helper.o helper.h
gcc ......
howdy.o : howdy.c
gcc ......
helper.o : helper.c helper.h
gcc ......
==================================================================
我认为作为依赖的helper.h的位置是有问题的
(1)目标howdy中不用依赖helper.h。在连接过程中不用helper.h文件
(2)目标howdy.o要依赖helper.h文件。因为在修改helper.h后howdy.o需要重新修改
(3)目标helper.o不需要依赖helper.h文件
所以我认为下面的规则更合适一些:
howdy : howdy.o helper.o
gcc ......
howdy.o : howdy.c helper.h
gcc ......
helper.o : helper.c
gcc ......
============================================================
小弟刚学linux编程,对上面认识不到的地方大家见谅
------解决方案--------------------
Makefile里一般不写.h的。
编译的时,编译.cpp。会将.h就地插入进来,形成一个编译单元。
------解决方案--------------------
h 文件不参与连接,
但是编译时候还是需要的 .......
------解决方案--------------------
一般.h不写入到依赖里面,因为.h里面一般都是接口,如果系统分析、概要设计做的好的话,那么.h是不应该经常变化的,而且,项目只要稍微做大一点,就会有很多的.h文件,如果所有的.h文件都放在依赖列表会很长很乱,手工去写也容易出错。对于.h的依赖,一般是通过自动编译工具,自动生成依赖,然后编译。
对于很少变化的.h文件,万一有了变动,那么更好的选择是进行一次完全的rebuild,make clean;make all。