2011-09-20 24 views
5

Tôi muốn đặt trình biên dịch xác định là -DBLUB cũng như -DFOO = 1.Tạo hỗn hợp (giá trị được đặt) CPPDEFINES trong SCON

Hiện nay tôi chỉ có:

env.Append("CPPDEFINES", ["BLUB", "VALUE2"]) 

bây giờ tôi muốn bao gồm một phần ba xác định qua "FOO": 1 và do đó sử dụng CPPDEFINES như một cuốn từ điển vì vậy tôi có thể sau này kiểm tra khá dễ dàng

env["CPPDEFINES"].get("FOO") == 1 

hoặc hơn. Mọi thứ tôi cố gắng dẫn đến lỗi cú pháp hoặc lỗi lạ. Có thể giải thích những cách kỳ lạ để làm điều này trong python với tôi?

Trả lời

4

Nếu bạn cần chỉ định giá trị cho bất kỳ xác định đơn lẻ nào, CPPDEFINES phải là từ điển.

Từ scons User Manual:

Nếu $ CPPDEFINES là một cuốn từ điển, các giá trị của $ CPPDEFPREFIX và $ CPPDEFSUFFIX biến xây dựng sẽ được nối vào đầu và cuối của mỗi mục từ điển. Khóa của mỗi mục từ điển là tên được xác định cho giá trị tương ứng của mục từ điển; nếu giá trị là Không, thì tên được xác định mà không có giá trị rõ ràng.

Ví dụ của bạn, tôi đề nghị:

env.Append(CPPDEFINES = { 'BLUB': None, 'VALUE2': None, 'Foo': 1 }) 

hoặc

env.Append(CPPDEFINES = { 'BLUB': None, 'VALUE2': None }) 
...and sometime later... 
env.Append(CPPDEFINES = { 'Foo': 1 }) 
+0

Bạn __CANNOT__ sử dụng * env.Append * trên một môi trường mới kể từ * CPPDEFINES * được khởi tạo như một danh sách và Nối chỉ cần thêm từ điển dưới dạng mục danh sách. Để làm việc này bạn phải sử dụng * env ["CPPDEFINES"] = {'Foo': 1} * sao cho biến/biến CPPDEFINES * thực tế được thay thế. – abergmeier

+0

@LCIDFire 'CPPDEFINES' không được khởi tạo như một danh sách cho tôi trong Môi trường mới trong các scons 2.0.1. Khi tôi tạo một môi trường mới, tôi có thể sử dụng mã tôi đã viết ở trên. Bạn có quyền chỉ ra rằng nếu 'CPPDEFINES' đã là một danh sách, bạn sẽ nhận được lỗi - do đó dòng đầu tiên của câu trả lời của tôi :) –

+0

Đối với danh sách, bạn có thể xử lý nó với:' env.Append (CPPDEFINES = ['BLUB', 'VALUE2', ('Foo', '1')]) '. Nó sẽ dẫn đến '-DBLUB -DVALUE2 -DFoo = 1' Bạn nên thêm nó vào câu trả lời của bạn. – Phong

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