2014-05-01 19 views
21

Dự án mà tôi đang cố gắng xây dựng có cờ mặc địnhNối biên dịch những lá cờ để CFLAGS và CXXFLAGS trong khi cấu hình/làm

CFLAGS = -Wall -g -O2 

CXXFLAGS = -g -O2 

tôi cần phải thêm một lá cờ -w cho cả các biến này (để loại bỏ: 'xem xét tất cả cảnh báo là lỗi)

tôi có một phương pháp để làm việc nó ra, cho

make 'CFLAGS=-Wall -g -O2 -w'; 'CXXFLAGS=-g -O2 -w' 

HOẶC

Run ./configure và tĩnh sửa đổi Makefile

Nhưng tôi muốn thêm lựa chọn của tôi với các tùy chọn có sẵn trong khi chạy configure hoặc make

Các bài Where to add a CFLAG, such as -std=gnu99, into an autotools project thuận tiện sử dụng một macro để đạt được điều này.

Trả lời

33

Bạn gần như đã làm đúng; tại sao bạn thêm dấu chấm phẩy?

Để làm điều đó trên configure dòng:

./configure CFLAGS='-g -O2 -w' CXXFLAGS='-g -O2 -w' 

Để làm điều đó trên make dòng:

make CFLAGS='-g -O2 -w' CXXFLAGS='-g -O2 -w' 

Tuy nhiên, điều đó không thực sự loại bỏ xem xét tất cả các cảnh báo là lỗi; xóa tất cả cảnh báo. Vì vậy, việc chỉ định cả hai -Wall-w không có ý nghĩa. Nếu bạn muốn giữ cảnh báo nhưng không để chúng bị coi là lỗi, hãy sử dụng cờ -Wall -Wno-error.

Ngoài ra, hầu hết các mã configure cho phép -Werror theo mặc định cũng có một cờ như --disable-werror hoặc tương tự. Chạy ./configure --help và xem có điều gì giống như vậy không.

+1

Có cách nào để tôi KHÔNG chỉ định thời gian làm thêm theo luật định, chẳng hạn như, CFLAGS = '$ CFLAGS ', để giữ lại mọi thứ đã được định cấu hình và không biết điều đó. – Vigneshwaren

+1

Không, điều đó là không thể (ít nhất là không phải thay đổi makefile). Theo các tiêu chuẩn mã hóa autoconf, giá trị mặc định của 'CFLAGS' luôn chỉ cho phép gỡ lỗi/tối ưu hóa, vì vậy nó thường phải là' -g -O2' cho hầu hết các hệ thống. Nó không chính xác (theo các tiêu chuẩn mã hóa) để thêm các cờ quan trọng khác như '-I',' -D', vv vào 'CFLAGS'. Vì vậy, nó phải được an toàn để luôn luôn chỉ ghi đè lên nó. – MadScientist

+0

Nếu bạn không thể gán CFLAGS mà không giữ lại các gói mặc định, thì bao bì phần mềm có chứa một lỗi cần được báo cáo cho người duy trì gói. –

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