Makefile命令,不编译所有内容

时间:2015-06-16 10:08:28

标签: c makefile

我有一个包含这个简单规则的makefile,

ref_approx_bs2_rsq_5_10_1ulp_arch1 : ref_approx_bs2_rsq_5_10_1ulp_arch1.o
    gcc -I../CModels -L../CModels -std=c99 -o ref_approx_bs2_rsq_5_10_1ulp_arch1 ref_approx_bs2_rsq_5_10_1ulp_arch1.o -lm -limg_float 

ref_approx_bs2_rsq_5_10_1ulp_arch1.o : ref_approx_rsq.c ../CModels/cogen_fp_bs2_rsq_5_10_1ulp_arch1.cpp ../CModels/cogen_fp_bs2_rsq_5_10_1ulp_arch1.h ../CModels/img_float.h ../CModels/img_float.c 
    gcc  -DCMODELLOC=\"../CModels/cogen_fp_bs2_rsq_5_10_1ulp_arch1.cpp\" -DCMODEL_NAME=cogen_fp_bs2_rsq_5_10_1ulp_arch1 -std=c99 -o ref_approx_bs2_rsq_5_10_1ulp_arch1.o -c ref_approx_rsq.c
libimg_float.a : ../CModels/img_float.o 
    ar -rcs ../CModels/libimg_float.a ../CModels/img_float.o 
img_float.o : ../CModels/img_float.h ../CModels/img_float.c 
    gcc -I ../CModels/ -o ../CModels/img_float.o -c ../CModels/img_float.c

但基本上如果我修改img_float.c并尝试再次使用make文件,它就不会编译并创建libimg_float.a。

makefile本身对我来说是正确的,因为我已经写了所有先决条件。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

它不会重新编译libimg_float.a因为没有任何依赖它。

Make不会通过你的makefile,总是尝试重建每个目标。通过找到列出的第一个(显式)目标并尝试构建它来进行工作。在构建第一个目标之前,它将尝试构建该目标的所有先决条件,在此之前,它将尝试构建那些目标等的所有先决条件,直到找不到更多先决条件。< / p>

如果目标不是第一个目标(或其先决条件等)的先决条件,则默认情况下不会构建它。您可以通过在命令行上列出它来请求构建它:make libimg_float.a将告诉make构建该目标,而不是第一个显式目标。当然,您可以在命令行上列出许多目标。

但通常人们首先创建一个目标,通常称为all,它列出了默认情况下应该构建的所有目标作为先决条件。

但是,您的makefile不正确,因为您的ref_approx_bs2_rsq_5_10_1ulp_arch1目标 使用libimg_float.a,但它并未列为先决条件。这意味着当libimg_float.a过期时不会更新。您应该更改您的makefile以显示先决条件关系:

ref_approx_bs2_rsq_5_10_1ulp_arch1 : ref_approx_bs2_rsq_5_10_1ulp_arch1.o libimg_float.a