2017-11-08 7 views
0

私は次のように によってモジュール固有のMakefileを含めるべきである一般的なメイクファイルで構築する必要があります - 私はこれを行う私のモジュールのMakefileで条件付きでMakefile関数の変数に追加するには?

# Conditionally add Logger as a MUT dependency 
define COND_ADD_LOGGER 
$if($$(findstring -DLOGGER, $$(DEFINES)), SOURCES += logger.c) 
endef 

define CMN_TESTS_RULE 
$(COND_ADD_LOGGER) 
$(eval OBJECTS = $(SOURCES:.cpp=.o)) 
$(eval OBJECTS := $(OBJECTS:.c=.o)) 
$(TARGET): $(OBJECTS) 
    $(COMPILE_RULE_CMN) 
endef 

-

SOURCES = a.c b.c test.cpp 

TARGET = generic_tests 
$(eval $(CMN_TESTS_RULE)) 

これではありませんlogger.cファイルを私が期待したようにSOURCESリストに追加してください。 (DEFINES変数は間違いなくそれにサブ文字列「-DLOGGER」を持っています。)

これは私がinfo使用するときに出力されます -

$if($(findstring -DLOGGER, $(DEFINES)), SOURCES += logger.c) 


generic_type_abstraction_tests: a.o b.o test.o 
     g++ -o [email protected] $^ D:/TEST/gtest-1.7.0/make/gtest_main.a 
$if($(findstring -DLOGGER, $(DEFINES)), SOURCES += logger.c) 


generic_type_abstraction_tests: a.o b.o test.o 
     g++ -o [email protected] $^ D:/TEST/gtest-1.7.0/make/gtest_main.a 

を私はGNUが上CYGWINからバージョン3.81を作る使用していますWindows 8マシン。

答えて

1

あなたのMakefileには意味がないことがいくつかあります(特に入れ子になったevalの奇妙な使用)。私のようなものでそれらを修正することをお勧め:

# Conditionally add Logger as a MUT dependency 
define COND_ADD_LOGGER 
SOURCES += $(if $(findstring -DLOGGER,$(DEFINES)),logger.c) 
endef 

define CMN_TESTS_RULE 
$(COND_ADD_LOGGER) 
OBJECTS = $$(patsubst %.c,%.o,$$(patsubst %.cpp,%.o,$$(SOURCES))) 
$(TARGET): $$(OBJECTS) 
    $(COMPILE_RULE_CMN) 
endef 

SOURCES = a.c b.c test.cpp 

TARGET = generic_tests 

$(eval $(CMN_TESTS_RULE)) 

.PHONY: debug 

debug: 
    $(info SOURCES: $(SOURCES)) 
    $(info OBJECTS: $(OBJECTS)) 

デモ:

$ make debug 
SOURCES: a.c b.c test.cpp 
OBJECTS: a.o b.o test.o 
gmake: 'debug' is up to date. 
$ make DEFINES=-DLOGGER debug 
SOURCES: a.c b.c test.cpp logger.c 
OBJECTS: a.o b.o test.o logger.o 
gmake: 'debug' is up to date. 
+0

私の主な障害は、 '$(TARGET)を使用した:代わりに' $(TARGET)の$(オブジェクト) ':$$ (OBJECTS) 'と呼ばれる。助けてくれてありがとう。 –

関連する問題