【问题标题】:Specifying Library paths in Makefile在 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 版本)

标签: c++ gcc g++ autoconf automake


【解决方案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,但不要那样做。 (见stackoverflow.com/questions/10220946/…)。如果用户在非标准位置安装库,用户有责任告诉编译器,用户应在配置时设置CPPFLAGS。为用户做基本的系统管理工作不是包维护者的责任。
  • 这些不是g++ 的参数。这些是预处理器的参数。请记住,用户可能正在使用任何编译器和任何预处理器,并且您不得假设g++gcc、或cpp 或您熟悉的任何工具。
猜你喜欢
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多