[英]Makefile order, doesn't compile everything
我有一個使用此簡單規則的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本身對我來說是正確的。
有什么建議嗎?
它不會重新編譯libimg_float.a
因為沒有任何依賴它。
Make不會遍歷您的makefile,而是始終嘗試重建每個目標。 通過找到列出的第一個 (顯式)目標並嘗試構建該目標來進行工作。 在構建第一個目標之前,它將嘗試構建該目標的所有先決條件,並且在此之前,它將嘗試構建那些目標的所有先決條件, 依此類推,直到找不到更多先決條件。
如果存在不是第一個目標的先決條件(或其先決條件等)的目標,則默認情況下將不會構建該目標。 您可以通過在命令行上列出它來請求構建它: 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.