2013-10-23 24 views
6

Tôi đang xây dựng một gói mà cung cấp nhiều makefiles, mỗi makefile đã cứng mã hoá ở bên một cái gì đó giống nhưCó tùy chọn cho gcc loại bỏ cờ -g không?

CFLAGS = -g -O2 -Wall ... 
CXXFLAGS = -g -O2 -Wall ... 

Tôi muốn loại bỏ -g tùy chọn nhưng tôi không muốn chỉnh sửa tất cả makefiles (thậm chí không tự động với sed hoặc một cái gì đó tương tự). Tập lệnh configure đi kèm với gói không có tùy chọn bật/tắt gỡ lỗi nhưng tôi có thể chuyển các biến số CFLAGSCXXFLAGS và nó tương ứng với các biến số CFLAGSCXXFLAGS tương ứng bao gồm tùy chọn -g.

Có tùy chọn nào sẽ hủy -g trong trường hợp được chỉ định không? Một cái gì đó như

gcc -option-im-looking-for -g file.c -o file 

Sẽ tạo mã nhị phân file mà không có biểu tượng gỡ lỗi. Tôi không muốn loại bỏ các nhị phân, tôi muốn nó được tạo ra tước.

+0

Hmmm Bạn có thể viết một tập lệnh gọi là mygcc phân tích cú pháp đối số đã nhận, loại bỏ các tham số không mong muốn và gọi gcc. Sau đó sử dụng mygcc làm trình biên dịch. Tôi không tự hào về câu trả lời này ^^ –

Trả lời

9

Bạn có thể phủ nhận ảnh hưởng của -g bằng cách thêm -g0. Nói

gcc -g -g0 foo.c -o file.o 

sẽ tạo ra một giống nhị phân với một thu được bằng cách nói

gcc foo.c -o foo.o 

Trích dẫn man gcc:

-glevel 
    ... 
     Level 0 produces no debug information at all. Thus, -g0 negates 
     -g. 
+0

Bạn là người đàn ông! Cảm ơn câu trả lời của bạn – e271p314

1

Bạn không cần chỉnh sửa makefiles. Chỉ cần ghi đè lên các biến trên dòng lệnh:

$ cat Makefile 
CFLAGS = -g -Wall 
all: 
    echo $(CFLAGS) 
$ make 
echo -g -Wall 
-g -Wall 
$ make CFLAGS=-Wall 
echo -Wall 
-Wall 
+0

Nhưng CFLAGS là một dòng rất dài (khoảng 100 tùy chọn, bao gồm vv'), tôi không giả sử phải biết CFLAGS là gì. Tất cả những gì tôi biết là những gì tôi không thích về nó nhưng tôi không thể hiểu làm thế nào để sửa chữa nó. – e271p314

0

Kể từ CFLAGS là một biến bash bạn có thể sử dụng mô hình thay thế $ {var/Mẫu/Thay thế} một cái gì đó như $ {CFLAGS/-g //} để xóa -g. Kiểm tra Parameter Substitution

+1

CFLAGS là một chuỗi được mã hóa cứng trong makefiles. Tôi có thể sử dụng 'find -name Makefile. | xargs sed -i 's/-g // g''. Nhưng tại sao tôi nên? Tất cả tôi cần phải làm những gì [devnull] (http://stackoverflow.com/users/2235132/devnull) nói. Khi tôi chạy 'cấu hình' tôi thêm CFLAGS = -g0 và vấn đề được giải quyết. – e271p314

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