2010-01-11 19 views
32

Tôi phát triển C/C++ bằng cách sử dụng IDE Eclipse. Eclipse cũng tạo ra một makefile mà tôi không muốn chỉnh sửa vì nó chỉ đơn giản là sẽ được ghi đè.Truyền C/C++ #defines để makefile

Tôi muốn sử dụng makefile đó để xây dựng hàng đêm trong Hudson.

Làm cách nào để chuyển #defines được tạo trong tệp dự án của IDE vào tệp makefile? (và tại sao Eclipse không bao gồm chúng trong makefile tạo ra?)

Tôi thực sự đã tìm ra một lần, sau đó vô tình ghi đè nó :-(Nhưng ít nhất tôi biết rằng nó có thể được thực hiện ...

Trả lời

30

Nếu bạn đang chạy làm từ dòng lệnh, sử dụng

make CPPFLAGS=-DFOO 

mà sẽ thêm -DFOO cho tất cả các sưu tập. Xem thêm CFLAGS, CXXFLAGS, LDFLAGS trong hướng dẫn sử dụng.

+1

Dường như điều này ghi đè CPPFLAGS mà tôi đang thiết lập Makefile. Có cách nào để thêm cờ này vào CPPFLAGS không? – matec

+5

@matec - Có định nghĩa từ các biến môi trường có ưu tiên. Bạn có thể sử dụng 'CPPFLAGS + = -DBAR' trong makefile của bạn để thêm nhiều cờ hơn –

1

để sử dụng GCC -d xác định.

OP nhận xét dưới đây rằng ông muốn vượt qua xác định vào thực hiện và có nó vượt qua nó vào GCC.

make không cho phép điều này. Thông thường bạn chỉ cần thêm khác làm cho quy tắc để thêm định nghĩa.Ví dụ 'làm cho phát hành' vs 'làm gỡ lỗi'. Là người tạo makefile bạn m ake hai quy tắc và có định nghĩa ngay trong tệp tạo. Bây giờ nếu Eclipse không đặt các định nghĩa vào makefile cho bạn, tôi sẽ nói Eclipse bị hỏng.

+0

Một trong số chúng tôi đã trả lời câu hỏi sai. Tôi nghĩ * anh ấy có một tiêu đề C++ với một số '# define' và muốn sử dụng chúng để đưa ra quyết định. Bạn đề xuất là chính xác nếu anh ta có một số biến trong thực hiện và muốn để có được chúng được xem xét bởi preprocessor trong khi biên soạn C++. – dmckee

+0

Có lẽ tôi không đủ rõ ràng, xin lỗi. Tôi muốn chuyển #defines để thực hiện, sau đó sẽ sử dụng chúng khi gọi gcc. Vì vậy, một cái gì đó như 'make -DmaxVal = 42' – Mawg

+0

Hmmm, tôi * biết * mà tôi đã quản lý trước đó, nhưng quên cách ... Tôi đồng ý rằng Eclipse sẽ đưa các định nghĩa vào tệp makefile. Tôi nhận thấy các dòng makfile '-include ../makefile.init ' và ' -include ../ makefile.defs' nhưng những tệp này không tồn tại (!). Những người CDT Eclipse dường như đã bỏ bóng vì không còn gói sau khi nâng cấp từ Jaunty lên Karmic. Có rất nhiều trang web hoặc cung cấp các giải pháp khác nhau về cách cài đặt CDT. Có lẽ cái tôi chọn "gần như làm việc". Đó là để nói, làm việc từ bên trong CDT, nhưng không phải bên ngoài với 'make'? – Mawg

2

Bạn có thể viết một chương trình nhỏ để bao gồm các tiêu đề và viết một đoạn makefile mà bạn include in the main makefile (yêu cầu tạo GNU).

Đây là một giải pháp khá xấu xí đòi hỏi một số tiền hợp lý của hackery tay. Thanh lịch hơn sẽ là phân tích cú pháp tệp dự án và viết đoạn makefile.

+0

vâng, nhưng vấn đề là tôi biết rằng tôi đã làm điều đó trước đây mà không cần đến hackery. Than ôi, tôi không còn nhớ được. – Mawg

+0

Xem nhận xét bên dưới. Có lẽ sự thất bại về CDT của Jaunty/Kosmic nghĩa là tôi không thể lặp lại bất cứ điều gì tôi đã làm trước đó. Tôi cũng có thể phải làm như bạn đề nghị và đọc trong makefile, xoa bóp nó và viết nó ra cho makefile khác. Btw, teh #defines Tôi muốn sử dụng không chính xác được sử dụng trong Eclipse (ví dụ, tôi có thể hoán đổi -Doutput = tệp cho -Doutput = console, v.v.) – Mawg

1

Nếu bạn đang sử dụng autotools, một tùy chọn khác là có 2 thư mục 'bin/debug' và 'bin/release'.

# Simple bootstrap script. 

# Remove previously generated filed and call autoreconf. 
# At the end configure 2 separate builds. 
echo "Setting up Debug configuration: bin/debug" 
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1" 
echo "Setting up Release configuration: bin/release" 
cd bin/release/ 
../../configure CXXFLAGS="-O2" 

Thiết lập Eclipse. Mở thuộc tính của dự án (dự án-> Properties-> C/C++ dựng-> Builder Settings) và thiết lập xây dựng Location-> Xây dựng Directory để

${workspace_loc:/helloworld/bin/debug} 

Thay thế 'helloworld' với thư mục tương đối của dự án của bạn để không gian làm việc (hoặc bạn có thể cung cấp đường dẫn tuyệt đối $ {/ abs/path/debug}). Làm tương tự với cấu hình Release, thay thế "/ debug" bằng "release" ở cuối đường dẫn.

Phương pháp này có vẻ như lãng phí dung lượng đĩa, nhưng là phương án hợp lệ để đạt được các bản dựng hoàn toàn riêng biệt.

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