我在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 $@
小智.. 5
因为,与您的主张相反,您并没有使用完全相同的选项构建它.
你CFLAGS
是空的,那些是你用来编译的标志.到达链接步骤时无法解决此问题.
因为,与您的主张相反,您并没有使用完全相同的选项构建它.
你CFLAGS
是空的,那些是你用来编译的标志.到达链接步骤时无法解决此问题.
你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++ -flto
和LDFLAGS=$(CXXFLAGS)