2009-12-11 61 views
6

Tôi đang sử dụng biến số SKELETON_JAR trên mã C++ của mình trong một tiêu đề. Tuy nhiên, tôi muốn cho phép người dùng xác định vị trí của bình trong thời gian biên dịch dễ dàng. Tôi nghĩ cách dễ nhất để làm điều đó là đặt định nghĩa này vào makefile là vậy sao?Biến tiền xử lý C++

#define SKELETON_JAR "./Util.jar" 
+0

Môi trường xây dựng của bạn là gì? Hệ điều hành của bạn? –

Trả lời

8

Trong mã của bạn:

#ifndef SKELETON_JAR 
    #define SKELETON_JAR "./Util.jar" // default path 
#endif 

và sau đó sử dụng makefile CPPFLAGS:=-DSKELETON_JAR="./Util.jar".

Tất nhiên bạn phải đảm bảo CPPFLAGS được chuyển đến trình biên dịch như là một phần của quy tắc biên dịch, đó là trường hợp nếu bạn đang sử dụng quy tắc ngầm định mặc định.

From GNU Make documentation:

chương trình C Biên soạn

không được thực hiện tự động từ nc với một lệnh có dạng `$ (CC) -c $ (CPPFLAGS) $ (CFLAGS)'

+0

Soạn thảo hữu ích về việc biên dịch có điều kiện, mặc dù tôi sẽ không mạo hiểm đưa ra bất kỳ giả định nào về bản chất của tệp makefile của OP. Phần quan trọng chỉ là công tắc dòng lệnh -D. – Clifford

+0

nhờ guys, cả hai câu trả lời thật tuyệt vời –

+2

Là một thay thế để xác định một đường dẫn mặc định bạn cũng có thể làm điều gì đó như thế này: #ifndef SKELETON_JAR #error "SKELETON_JAR chưa được xác định" #endif Bằng cách đó bạn sẽ dễ dàng nắm bắt bất kỳ trường hợp nào chưa được xác định trong Makefile – Glen

6

Tùy thuộc vào trình biên dịch của bạn, cách thông thường để thực hiện việc này là sử dụng cờ -D của trình biên dịch trong tệp makefile. Ví dụ:

MYFLAGS = -DSKELETON_JAR = "foo"

sau đó vào lúc:

gcc $ (MYFLAGS) $ (OTHER_STUFF)

+0

Để downvoter - mà bit của câu trả lời này là không chính xác? –

+0

Đã tự hỏi điều tương tự –

+0

Một số người chỉ muốn xuống bỏ phiếu tôi đoán. Tôi có lẽ đã chỉ đơn giản là mô tả các -D = GCC tùy chọn hơn là làm cho bất kỳ giả định có thể khó hiểu về makefile của OP. – Clifford

0

Sử dụng cờ tổng hợp cho cùng một cờ và xác định trong Makefile.

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