[英]Modify Makefile to include a library and use C++11
我有以下makefile:
VER=cblas
GCC_VERSION = 7.2.0
PREFIX = /usr/local/gcc/${GCC_VERSION}/bin/
CC = ${PREFIX}gcc
CPP = ${PREFIX}g++
w2.${VER}: w2.${VER}.o
$(CPP) -ow2.${VER} w2.${VER}.o
w2.${VER}.o: w2.${VER}.cpp
$(CPP) -c -O2 -std=c++17 w2.${VER}.cpp
clean:
rm *.o
我需要修改此makefile,使其包含gsl庫。 我可以直接使用以下命令進行編譯:
g++ -Wall -I/home/path/gsl/include -c w2.cblas.cpp
g++ -L/home/path/gsl/lib w2.cblas.o -lgsl -lgslcblas -lm
如何修改此Makefile使其包含gsl庫(和c ++ 11)?
而不是定義自己的規則(即,刪除以下內容):
w2.${VER}: w2.${VER}.o
$(CPP) -ow2.${VER} w2.${VER}.o
w2.${VER}.o: w2.${VER}.cpp
$(CPP) -c -O2 -std=c++17 w2.${VER}.cpp
您可以簡單地依靠已經定義的隱式規則。 您只需要正確設置這些隱式規則使用的變量即可。 因此,為了找到要編譯的頭文件:
CPPFLAGS := -I/home/path/gsl/include
為了優化和規范C ++標准:
CXXFLAGS := -O2 -std=c++11
最后,對於鏈接:
LDFLAGS := -L/home/path/gsl/lib
LDLIBS := -lgsl -lgslcblas -lm
LD = $(CXX)
請注意,這些規則依賴於CXX
變量來指定編譯器而不是CPP
,因此您不需要:
CPP = ${PREFIX}g++
但:
CXX = ${PREFIX}g++
順便說一句,make中的CPP
代表C預處理器 (而不是C ++ ,它將是CXX
)。
將上面說明的所有內容放在一起,您的makefile將如下所示:
ER=cblas
GCC_VERSION = 7.2.0
PREFIX = /usr/local/gcc/${GCC_VERSION}/bin/
CC = ${PREFIX}gcc
CXX = ${PREFIX}g++
CPPFLAGS := -I/home/path/gsl/include
CXXFLAGS := -O2 -std=c++11
LDFLAGS := -L/home/path/gsl/lib
LDLIBS := -lgsl -lgslcblas -lm
LD = $(CXX)
clean:
rm *.o
請注意, clean
是上述makefile中唯一的顯式規則 。
考慮到你已經調用源文件w2.cblas.cpp
,那么你應該打電話make
這種方式:
make w2.cblas
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.