修改生成文件以包含库并使用 C++11
Modify Makefile to include a library and use C++11
我有以下制作文件:
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
我需要修改这个生成文件,使其包含 gsl 库。我能够直接使用以下命令进行编译:
g++ -Wall -I/home/path/gsl/include -c w2.cblas.cpp
g++ -L/home/path/gsl/lib w2.cblas.o -lgsl -lgslcblas -lm
如何修改此生成文件以包含 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++
顺便说一下,CPP
in make 代表C 预处理器(而不是C++,那将是CXX
)。
生成文件
将上面解释的所有内容放在一起,您的生成文件将如下所示:
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
是上述生成文件中唯一的显式规则。
考虑到您有名为w2.cblas.cpp
的源文件,那么您应该以这种方式调用make
:
make w2.cblas
相关文章:
- 如何在 C++ 的 .so 文件中包含库
- 如何在内核中添加包含库的路径?
- 在基于命令行的QT插件构建中包含库
- 检查包含库C++的大小
- 在 C++ 中包含库数据库.txt文件时出错
- C++ 在虚幻引擎中包含库后重新定义类型
- 无法在Windows中找到来自cmake的MySQL和Boost包含/库
- 包含库,同时在 XCode 中以C++编码
- 如何在 CMake 项目中正确包含库
- 修改生成文件以包含库并使用 C++11
- 忽略来自 GDB(终端)中的包含/库文件的调试消息
- 在标题文件和CPP文件中都包含库
- 用C 11共享库编译共享库(旧标准)
- 在Linux中使用gcc 4.1编译的C++03应用程序中使用C++11共享库
- 为什么 C++11 包含一个关于比较空指针的奇怪子句
- 在Visual Studio C 项目中设置默认的附加包含/库路径
- 在C 项目中包含库的不同方式是什么?
- 在 cmake c++ 项目中包含库的首选方法是什么?
- 在包含库时找不到Qt shared_ptr
- 如何在命令行上使用 Visual Studio 进行编译时包含库