簡體   English   中英

Makefile命令,不會編譯所有內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM