在 Makefile 中指定库路径

Posted

技术标签:

【中文标题】在 Makefile 中指定库路径【英文标题】:Specifying Library paths in Makefile 【发布时间】:2012-12-17 04:24:55 【问题描述】:

我在一个 C++ 项目中使用 autoconf 和 automake,我希望 g++ 足够聪明,可以在我的源代码已经拥有的情况下查看 /usr/include/<library-name>

#include <libxml/xpath.h>
#include <libxml/xpathInternals.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <curl/curl.h>
#include <openssl/md5.h>

当我刚刚运行 ./configure &amp;&amp; make 时,我得到了这个错误

g++ -DHAVE_CONFIG_H -I. -I..   -Wall -O2   -g -O2 -MT azurefs.o -MD -MP -MF .deps/azurefs.Tpo -c -o azurefs.o azurefs.cpp
azurefs.cpp:33:26: fatal error: libxml/xpath.h: No such file or directory
compilation terminated

我必须以这种方式使用CCXXFLAGS 包含库路径

$ CXXFLAGS=-I/usr/include/libxml2 ./configure && make

有没有更好的方法来编写我的代码、Makefile 或 autoconf 文件,以便 g++ 可以在 /usr/include/&lt;library-name&gt; 中正确查找库?

【问题讨论】:

有一个更好的方法:./configure CPPFLAGS=-I/usr/include/libxml2 &amp;&amp; make。 (假设您使用的不是古老的 autoconf 版本) 【参考方案1】:

在我的 Makefile.am 中,我有以下行来添加 g++ 参数:

AM_CPPFLAGS = -I$(top_srcdir)/src/include/ --std=c++0x

我认为你需要这样的东西:

AM_CPPFLAGS = `pkg-config --cflags libxml-2.0`

因此您也不必担心包含在另一个系统上的位置。

【讨论】:

我使用了 CXXFLAGS 似乎可以工作。前缀 AM_ 是什么?例如:CXXFLAGS=-I/usr/include/libxml2 ./configure 我不知道这是不是个好主意。如果我想构建你的应用程序,我需要知道我必须以这种方式设置 CXXFLAGS。 AM_CPPFLAGS 是 Makefile.am 中的一个变量。如果你把它放在那里,以后就没有人需要打扰了。 不!不!不!如果您打算使用pkg-config,则使用PKG_CHECK_MODULES,但不要那样做。 (见***.com/questions/10220946/…)。如果用户在非标准位置安装库,用户有责任告诉编译器,用户应在配置时设置CPPFLAGS。为用户做基本的系统管理工作不是包维护者的责任。 这些不是g++ 的参数。这些是预处理器的参数。请记住,用户可能正在使用任何编译器和任何预处理器,并且您不得假设g++gcc、或cpp 或您熟悉的任何工具。

以上是关于在 Makefile 中指定库路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在makefile中指定头文件目录

如何在 Makefile.am 中指定我想要 C++0x?

makefile里怎么指定库的路径

Makefile 中的规则

make命令和makefile

Makefile