2011-06-29 83 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:我現在使用tup構建系統來處理所有的c/C++項目。 http://gittup.org/tup/ – Blub

回答

52

我找到了一個解決方案:

$(eval variablename=whatever) 

這工作:)

(雖然現在我可能會嘗試找到一個更簡單的構建系統;))大家閱讀和也

謝謝寫作課程@eriktous!

3

如果你把它寫像你這樣,分配將作爲一個shell命令,這使被執行你得到的錯誤。

我會嘗試舉辦像這樣的東西:

 
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構造兩次非常高興。我必須更加努力地想出一些可以避免這種情況的方法。