Chcę użyć dyrektywy include tylko dla określonego celu. Nie chcę uruchamiać innych plików makefile, gdy cel nie jest potrzebny, ponieważ oznacza to, że pliki makefile są generowane niepotrzebnie.Sposób użycia dyrektywy include w pliku Makefile dla określonego celu
Czy istnieje sposób warunkowego zastosowania dyrektywy include, która jest zależna od celu? Lub w jakiś sposób uczynić dyrektywę włączenia jako warunek wstępny celu.
Oto co mam do tej pory:
# Flags
INCDIR = $(CURDIR)/include
CFLAGS = -Wall -Wno-overflow -Wno-uninitialized -pedantic -std=c99 -I$(INCDIR) -O3
LFLAGS = -flat_namespace -dynamiclib -undefined dynamic_lookup
# Directory names
# Set vpath search paths
vpath %.h include
vpath %.c src
vpath %.o build
vpath %.d build
# Get files for the core library
CORE_FILES = $(wildcard src/*.c)
CORE_OBJS = $(patsubst src/%.c, build/%.o, $(CORE_FILES))
CORE_DEPS = $(CORE_OBJS:.o=.d)
# Core library target linking
core : $(CORE_OBJS) | bin
$(CC) $(LFLAGS) -o bin/libcbitcoin.2.0.dylib $(CORE_OBJS)
# Include header prerequisites (How to do only for "core" target?)
include $(CORE_DEPS)
# Makefiles for header dependencies.
$(CORE_DEPS): build/%.d: src/%.c | build
rm -f [email protected]; \
$(CC) -I$(INCDIR) -MM $< -MT '$(@:.d=.o) [email protected]' > [email protected]
# Objects depend on directory
$(CORE_OBS) : | build
# Create build directory
build:
mkdir build
# Create bin directory
bin:
mkdir bin
# Core Compilation
$(CORE_OBJS): build/%.o: src/%.c
$(CC) -c $(CFLAGS) $< -o [email protected]
# Depencies require include/CBDependencies.h as a prerequisite
build/CBOpenSSLCrypto.o: include/CBDependencies.h
# Crypto library target linking
crypto : build/CBOpenSSLCrypto.o -lcrypto -lssl | bin
$(CC) $(LFLAGS) -o bin/libcbitcoin-crypto.2.0.dylib build/CBOpenSSLCrypto.o -lcrypto -lssl
# Crypto library compile
build/CBOpenSSLCrypto.o: dependencies/crypto/CBOpenSSLCrypto.c
$(CC) -c $(CFLAGS) $< -o [email protected]
#Clean
clean:
rm -f $(CORE_OBJS) $(CORE_DEPS) build/CBOpenSSLCrypto.o
Jak powinno być w stanie powiedzieć, że nie muszą zawierać pliki „.d” za «Crypto», ale robię dla «rdzenia» (domyślnie cel).
Dziękuję za pomoc.
Ty * możesz * to zrobić, ale * nie powinieneś *. To idzie wbrew ziarnu Make i istnieją lepsze sposoby. Czy chcesz szybkie i proste podejście, czy zaawansowane i mocne? – Beta
Następnie mogę zadać pytanie: czym jest "ziarno marki" i te "lepsze sposoby"? Tak długo, jak jest to łatwe do utrzymania. To jest to czego chcę. Nie chcę ręcznie dodawać wstępnych wymagań nagłówka. –