web-dev-qa-db-ja.com

レシピ内で変数を割り当てられません

これを機能させるにはどうすればよいですか? 「make:somevariable:Command not found」というエラーメッセージが表示される

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
35
Blub

the eval function を使用して解決策を見つけました:

$(eval variablename=whatever)

これは動作します:)

(私は今、より簡単なビルドシステムを見つけようとするかもしれませんが;))

読んでくれてありがとう、そしてもちろん@eriktousも書いてくれてありがとう!

66
Blub

あなたがしたようにそれを書く場合、割り当てはあなたが得たエラーを与えるシェルコマンドとして実行されます。

私はそれを次のように整理してみます:

 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

ifneq構文を2回使用することに私はあまり満足していませんが、これはあなたが望むことをするはずです。それを回避する何かを思いつくのはもっと難しいことだと思います。

4
eriktous