2016-12-07 21 views
1

Ceci est mon fichier makefile.makefile appelant toujours la dernière cible

#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 [email protected],[email protected],[email protected]) $(Openssl_include) $(Openssl_lib) 
    cc -c -fpic $^ -o $(patsubst [email protected],[email protected],[email protected]) $(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 [email protected],[email protected],[email protected]) $(Wolfssl_include) $(Wolfssl_lib) 
    cc -c -fpic $^ -o $(patsubst [email protected],[email protected],[email protected]) $(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 [email protected],[email protected],[email protected]) $(Mbedssl_include) $(Mbedssl_lib) 
     cc -c -fpic $^ -o $(patsubst [email protected],[email protected],[email protected]) $(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 

Indépendamment du fait que je fais un appel à Faire Openssl, Faire Wolfssl ou Faire Mbedssl. Toujours la cible Make Mbedssl est appelée. J'ai essayé de réorganiser les cibles, et tout le temps la cible dans la dernière position est appelée quelle que soit la cible que j'ai passé à faire depuis la ligne de commande. Merci.

Répondre

5

Vous semblez essayer de déclarer plusieurs instances de la règle de modèle %.o : %.c afin qu'elles aient des effets différents en fonction de leur emplacement dans le fichier makefile. Ce n'est pas possible. Make lit tout le fichier makefile en premier, avant qu'il ne commence à traiter les cibles, et il n'a qu'une seule "portée" pour toutes les règles.

Si vous redéfinissez la règle de motif %.o : %.c, l'ancienne règle est supprimée et la nouvelle règle s'applique à toutes les recherches. La dernière instance du modèle %.o : %.c est donc celle qui est en vigueur pour toutes les recherches de cibles .o et toutes les règles précédentes sont supprimées.

Je vous recommande de regarder dans target-specific variables qui pourrait vous aider avec la mise en œuvre.

+0

Merci, j'ai utilisé des modèles différents, cela a fonctionné. Merci beaucoup. – sg777