2011-06-29 14 views
27

この作業を行うにはどうすればよいですか?それは「作る:somevariable:コマンドが見つかりません」とエラーが出てレシピ内で変数を割り当てることができません

sometarget: 
    somevariable = somevalue 

全例:あなたがやったようにあなたがそれを記述する場合

CXXFLAGS = -I/usr/include/test -shared -fPIC 

OBJ = main.o Server.o 

blabla : $(OBJ) 
ifeq ($(argsexec),true) 
    # Creates an executable 
    CXXFLAGS = -I/usr/include/test 
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
else 
    # Creates a library 
    DESTDIR = /home/pc 
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
    ./bn.sh 
endif 
+0

あなたはもっと良い解決策を見つけましたか? –

+1

も参照してください。http://stackoverflow.com/questions/1909188/define-make-variable-at-rule-execution-time – Alexey

+0

Pritesh:すべてのc/C++プロジェクトにtupビルドシステムを使用します。 http://gittup.org/tup/ – Blub

答えて

52

私は解決策が見つかりました:これは動作します:)

$(eval variablename=whatever) 

を(私は今より簡単にビルドシステムを探してみるかもしれないが;))皆の読書のためともの

感謝コース@eriktous書く!

3

、割り当てが与える、シェルコマンドとして実行されますあなたが持っているエラー。

私はそれをこのような何か整理しようとするだろう:私は二回ifneq構文を使用して、非常に満足していないが、これは、あなたが望む何をすべき

 
CXXFLAGS = -I/usr/include/test 
ifneq ($(argsexec),true) 
    CXXFLAGS += -shared -fPIC 
    DESTDIR = /home/pc 
endif 

OBJ = main.o Server.o 

blabla : $(OBJ) 
    $(CXX) -o blabla $(OBJ) $(CXXFLAGS) 
ifneq ($(argsexec),true) 
    ./bn.sh 
endif 

を。私はそれを避ける何かを思いつくことをもっと難しく考えなければならないだろう。

関連する問題