我剛開始學習Linux,在禁用GCC對我的一個C++項目進行優化時遇到了一些麻煩。如何在使用makefile時禁用GCC優化?
該項目建有像這樣的makefile ...
make -j 10 && make install
我已經在該命令禁用優化是沿東西線各個站點讀取...
gcc -O0 <your code files>
有人能幫我申請makefile而不是個人代碼嗎?我一直在尋找幾個小時,空手而歸。
我剛開始學習Linux,在禁用GCC對我的一個C++項目進行優化時遇到了一些麻煩。如何在使用makefile時禁用GCC優化?
該項目建有像這樣的makefile ...
make -j 10 && make install
我已經在該命令禁用優化是沿東西線各個站點讀取...
gcc -O0 <your code files>
有人能幫我申請makefile而不是個人代碼嗎?我一直在尋找幾個小時,空手而歸。
在一些標準的makefile設置,你可以
make -j10 -e CPPFLAGS=-O0
但是makefile文件可能會使用其他替代變量或重寫環境。您需要向我們展示了Makefile文件,以便提出修改
例如,一個優化的編譯可以寫成:
all:
g++ -O3 main.cpp
與調試信息(無優化)的彙編可以寫爲:
all:
g++ -g main.cpp
沒有人寫這樣的makefile。事實上,你甚至不需要一個文件,只需鍵入'make main' – 2012-02-13 15:03:52
當然,這不是一個可用的makefile。只是如何啓用/禁用優化的最簡單示例。 – rasmus 2012-02-13 15:05:52
最簡單的(有用)生成文件,其允許調試/釋放模式是:
#
# Define the source and object files for the executable
SRC = $(wildcard *.cpp)
OBJ = $(patsubst %.cpp,%.o, $(SRC))
#
# set up extra flags for explicitly setting mode
debug: CXXFLAGS += -g
release: CXXFLAGS += -O3
#
# Link all the objects into an executable.
all: $(OBJ)
$(CXX) -o example $(LDFLAGS) $(OBJ) $(LOADLIBES) $(LDLIBS)
#
# Though both modes just do a normal build.
debug: all
release: all
clean:
rm $(OBJ)
使用默認版本(未指定優化)
> make
g++ -c -o p1.o p1.cpp
g++ -c -o p2.o p2.cpp
g++ -o example p1.o p2.o
用法:發佈版本(採用-O3)
> make clean release
rm p1.o p2.o
g++ -O3 -c -o p1.o p1.cpp
g++ -O3 -c -o p2.o p2.cpp
g++ -o example p1.o p2.o
用法:調試版本(使用-g)
> make clean debug
rm p1.o p2.o
g++ -g -c -o p1.o p1.cpp
g++ -g -c -o p2.o p2.cpp
g++ -o example p1.o p2.o
請注意,當指定了除debug或release之外的目標時,您的目標特定變量將不起作用。更強大的方法是http://stackoverflow.com/a/5153406/412080 – 2012-02-13 15:32:22
@MaximYegorushkin:它沒有指定目標工作正常。它被設計成當你沒有指定任何東西時不使用變量。它將使用構建代碼的第一條規則'all'。 **如上所示**。我認爲你鏈接的makefile也沒有優勢。這絕對不是**更強大。它只是使用不同的技術做同樣的事情(除非你指定了默認的-g(這不是我想要的))。 – 2012-02-13 15:36:06
對,'make this'只適用於'make','make debug'和'make release'。 – 2012-02-13 15:39:12
這將很難提出對Makefile的編輯,我們無法看到 – sehe 2012-02-13 14:49:54
如果不指定優化級別,則-O0是默認值。您可能希望使用-g標誌,因爲這會生成調試符號。 – 2012-02-13 15:47:16
對不起,遲到了,我一直很忙。這裏的生成文件之一:http://pastebin.com/ftvXEFbv – inline 2012-02-14 13:58:21