簡體   English   中英

修改Makefile以包括一個庫並使用C ++ 11

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM