2011-06-29 25 views
27

Làm cách nào để thực hiện công việc này? Nó lỗi với "thực hiện: somevariable: Command not found"Không thể gán biến trong công thức

sometarget: 
    somevariable = somevalue 

Full dụ:

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

Bạn có tìm thấy giải pháp tốt hơn không? –

+1

Xem thêm http://stackoverflow.com/questions/1909188/define-make-variable-at-rule-execution-time – Alexey

+0

Pritesh: Bây giờ tôi sử dụng hệ thống xây dựng tup cho tất cả các dự án c/C++ của tôi. http://gittup.org/tup/ – Blub

Trả lời

52

Tôi tìm thấy một giải pháp:

$(eval variablename=whatever) 

này hoạt động :)

(mặc dù bây giờ tôi có thể cố gắng tìm một hệ thống xây dựng dễ dàng hơn;))

Cảm ơn tất cả mọi người để đọc và cũng của khóa học @eriktous để viết!

3

Nếu bạn viết nó như bạn đã làm, việc chuyển nhượng sẽ được thực hiện như một lệnh shell, mang đến cho lỗi bạn gặp phải.

tôi sẽ cố gắng tổ chức nó một cái gì đó như thế này:

 
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 

này nên làm những gì bạn muốn, mặc dù tôi không hoàn toàn hài lòng với việc sử dụng ifneq xây dựng hai lần. Tôi phải suy nghĩ nhiều hơn để tìm ra thứ gì đó tránh được điều đó.

Các vấn đề liên quan