2016-07-04 10 views
0

私はmakefileに堪能ではありません。私はRTFMを持っていて、だから見ましたが、私はこの単純な例で間違っていることはまだ得られません。このメイクファイル機能で何が問題になっていますか?

この作品

TARGET = nim 
    ifeq ($(CONFIG),Release) 
     $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(APP_SOURCES) Neonim.cc,$(LIBS),$(DEPS))) 
     $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) 
    else 
     $(eval $(call LINK_RULE,$(TARGET),$(APP_SOURCES) Neonim.cc,$(LIBS),$(DEPS))) 
    endif 
    $(eval $(call NMF_RULE,$(TARGET),)) 

    TARGET = ttt 
    ifeq ($(CONFIG),Release) 
     $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(APP_SOURCES) TTToe3D.cc,$(LIBS),$(DEPS))) 
     $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) 
    else 
     $(eval $(call LINK_RULE,$(TARGET),$(APP_SOURCES) TTToe3D.cc,$(LIBS),$(DEPS))) 
    endif 
    $(eval $(call NMF_RULE,$(TARGET),)) 

これは動作しません:

define bld = 
     SOURCES = $(APP_SOURCES) $(2) 
     ifeq ($(CONFIG),Release) 
     $(eval $(call LINK_RULE,$(1)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) 
     $(eval $(call STRIP_RULE,$(1),$(1)_unstripped)) 
     else 
     $(eval $(call LINK_RULE,$(1),$(SOURCES),$(LIBS),$(DEPS))) 
     endif 
     $(eval $(call NMF_RULE,$(1),)) 
    endef 
    $(eval $(call bld,nim,Neonim.cc)) 
    $(eval $(call bld,ttt,TTToe3D.cc)) 

は、彼らは同じではありませんか?どのようにこの関数を書くのですか?

+2

まず、GNUのバージョンを使用している作りますか?第二に、「うまくいかない」とはどういう意味ですか?何が起こるのですか? – MadScientist

+0

「eval」を使用する各行に、同じ行に「eval」ではなく「info」を追加します。これは、評価関数がどのように拡大しているかを正確に表示します。おそらく何かが予想通りに拡張しないでしょうか?私の推測では、いくつかの '$'文字は、eval関数でエスケープされているため、定義に倍加する必要があります。これがあなたの問題ならば、あなたは 'info'機能でそれを見るでしょう。 – Tim

答えて

0

エラーを再現するのに十分な情報を私たちに与えていない(実際にはあなたの例はminimalだとは思わないが)私は手足のところに出かけるだろう。これに

define bld = 
    SOURCES = $(APP_SOURCES) $(2) 
    ifeq ($(CONFIG),Release) 
    $(eval $(call LINK_RULE,$(1)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) 
    $(eval $(call STRIP_RULE,$(1),$(1)_unstripped)) 
    else 
    $(eval $(call LINK_RULE,$(1),$(SOURCES),$(LIBS),$(DEPS))) 
    endif 
    $(eval $(call NMF_RULE,$(1),)) 
endef 

:これを変更

define bld 
    SOURCES = $(APP_SOURCES) $(2) 
    ifeq ($(CONFIG),Release) 
    $(call LINK_RULE,$(1)_unstripped,$(SOURCES),$(LIBS),$(DEPS)) 
    $(call STRIP_RULE,$(1),$(1)_unstripped) 
    else 
    $(call LINK_RULE,$(1),$(SOURCES),$(LIBS),$(DEPS)) 
    endif 
    $(call NMF_RULE,$(1),) 
endef 
+0

手足がほぼ保持されています - 私はSOURCES = $(APP_SOURCES)$(2)という行を取り出し、その値をパラメータリストで使用しました。 – dwn

関連する問題