簡體   English   中英

makefile始終調用最后一個目標

[英]makefile always calling the last target

這是我的makefile。

#starts here
#Openssl constants
Openssl_include=-I/usr/local/openssl/include
Openssl_lib=-L/usr/local/openssl/lib -lcrypto -ldl
#Wolfssl constants
Wolfssl_include=-I/usr/local/wolfssl/include -LLIBDIR -DWOLFSSL_SHA512
Wolfssl_lib=-L/usr/local/wolfssl/lib -lwolfssl
#Mbedssl constants 
Mbedssl_include=-I/usr/local/mbedssl/include
Mbedssl_lib=-L/usr/local/mbedssl/lib -lmbedcrypto

SRC=CAL_aes.c CAL_sha.c CAL_cmac.c CAL_rsa.c
OBJ=$(patsubst %.c,%.o,$(SRC))
M_OBJ=$(patsubst %.c,M_%.o,$(SRC))
M_fpic_OBJ=$(patsubst %.c,M_fpic_%.o,$(SRC))

O_OBJ=$(patsubst %.c,O_%.o,$(SRC))
O_fpic_OBJ=$(patsubst %.c,O_fpic_%.o,$(SRC))

W_OBJ=$(patsubst %.c,W_%.o,$(SRC))
W_fpic_OBJ=$(patsubst %.c,W_fpic_%.o,$(SRC))

.PHONY: clean Openssl Wolfssl Mbedssl compile_openssl compile_wolfssl compile_mbedssl
compile_openssl: $(OBJ)  
%.o: %.c
    cc -c $^ -o $(patsubst $@,O_$@,$@) $(Openssl_include) $(Openssl_lib)
    cc -c -fpic $^ -o $(patsubst $@,O_fpic_$@,$@) $(Openssl_include) $(Openssl_lib)
Openssl: compile_openssl
    ar rc libO_CAL_crypto.a $(O_OBJ)
    cc -shared -o libO_CAL_crypto.so $(O_fpic_OBJ)
compile_wolfssl: $(OBJ)  
%.o: %.c
   cc -c $^ -o $(patsubst $@,W_$@,$@) $(Wolfssl_include) $(Wolfssl_lib)
   cc -c -fpic $^ -o $(patsubst $@,W_fpic_$@,$@) $(Wolfssl_include) $(Wolfssl_lib)
Wolfssl: compile_wolfssl
        ar rc libW_CAL_crypto.a $(W_OBJ)
        cc -shared -o libW_CAL_crypto.so $(W_fpic_OBJ)
compile_mbedssl: $(OBJ)  
    %.o: %.c
        cc -c $^ -o $(patsubst $@,M_$@,$@) $(Mbedssl_include) $(Mbedssl_lib)
        cc -c -fpic $^ -o $(patsubst $@,M_fpic_$@,$@) $(Mbedssl_include) $(Mbedssl_lib)
Mbedssl: compile_mbedssl
        ar rc libM_CAL_crypto.a $(M_OBJ)
        cc -shared -o libM_CAL_crypto.so $(M_fpic_OBJ)
    #ends here

無論我是致電Make Openssl,Make Wolfssl還是Make Mbedssl。 總是會調用目標Make Mbedssl。 我嘗試重新排列目標,並且無論何時我從命令行傳遞來的目標,都始終調用最后位置的目標。 謝謝。

您似乎正在嘗試聲明模式規則%.o : %.c多個實例,因此根據它們在makefile中出現的位置,它們將具有不同的影響。 那不可能 Make在開始處理任何目標之前先讀取整個makefile,並且它對所有規則只有一個“作用域”。

如果重新定義模式規則%.o : %.c則舊規則將被刪除,新規則將對所有查找生效。

因此, %.o : %.c模式的最后一個實例是對所有.o目標查找有效的實例,並且刪除了所有先前的規則。

我建議您研究特定目標的變量 ,這些變量可能會對您的實施有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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