为什么我的代码在代码块中构建时运行得更快?

时间:2014-08-20 07:43:56

标签: c++ linux makefile g++ codeblocks

我在Codeblocks中用C ++创建了一个小型库(大约600行),并且我使用OMP和O3优化来构建它。当我尝试使用具有完全相同选项( -fopenmp -O3 )的Makefile通过终端构建相同的代码时,它运行速度慢了3倍。我需要在各种机器上构建它,所以我需要通过终端而不是通过Codeblocks来完成这个过程。为什么会这样? 如果您有兴趣,这是我的Makefile:

CC=g++ 
CFLAGS= 
LDFLAGS= -fopenmp -O3 -std=c++11 
SOURCES=main.cpp CNNFunctions.cpp     
OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=cnn

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o: 
    $(CC) $(CFLAGS) $< -o $@

2 个答案:

答案 0 :(得分:5)

因为,与您的说法相反,您并未使用完全相同的选项构建它。

您的CFLAGS为空,这些是您用于编辑的标志。到达链接步骤时,您无法解决此问题。

答案 1 :(得分:5)

您的Makefile错了。优化标志主要在编译时相关。至少尝试:

CXX=g++ 
CXXFLAGS=  -Wall -fopenmp -O3 -std=c++11 -mtune=native
LDFLAGS= -fopenmp
SOURCES=main.cpp CNNFunctions.cpp     
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=cnn

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
       $(LINK.cpp) $(OBJECTS) -o $@

链接时优化的链接时优化可能很重要,对于该用途CXX=g++ -fltoLDFLAGS=$(CXXFLAGS)