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

pap*_*p-x 1 c++ linux makefile g++ codeblocks

我在Codeblocks中用C++创建了一个小型库(大约600行),我正在使用OMP和O3优化来构建它.当我尝试使用具有完全相同选项的Makefile(-fopenmp -O3)通过终端构建相同的代码时,它运行速度慢了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 $@
Run Code Online (Sandbox Code Playgroud)

小智 5

因为,与您的主张相反,您并没有使用完全相同的选项构建它.

CFLAGS是空的,那些是你用来编译的标志.到达链接步骤时无法解决此问题.


Bas*_*tch 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 $@
Run Code Online (Sandbox Code Playgroud)

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