0

我正在开发一个使用 automake 构建系统的相对较大的项目。

现在的问题是我需要将项目与来自另一个项目的库链接(这工作正常),但我还需要包含来自另一个项目源树的标题(api.h)。

INCLUDES = -I@REMOTE_PROJECT_DIR@

在 Makefile.am 中不起作用,因为在远程源目录中有 .h 文件的名称是重叠的。我怎样才能只添加api.h

我在项目的包含目录中使用了符号链接,但现在我需要将源推送到公共仓库中,并且使用它的每个人都有另一个项目在不同的目录中,所以我需要使用配置参数。

4

2 回答 2

1

您不想以任何方式调整 Makefile.am 或 configure.ac。如果 api.h 安装在标准位置(例如 /usr/include),那么您只需要 configure.ac 中的 AC_CHECK_HEADERS([api.h])。如果 api.h 安装在非标准位置(例如 /home/joe/include),则在项目中获取它的方式在配置时确定。运行 configure 时,将参数 CPPFLAGS=-I/home/joe/include 添加到 configure 的调用中。您没有在构建文件本身中指明非标准位置。

另一种选择是使用 pkg-config,但是当你运行 configure 时,你的头文件的非标准位置仍然会被处理。(这次通过设置 PKG_CONFIG_PATH 而不是 CPPFLAGS)

于 2010-03-09T15:00:04.157 回答
0

如果您有相同名称的标题,您可以将其中至少一个放入具有不同名称的目录中,并使用目录名称包含它。

这是一个示例目录结构:

mylibrary/include/myblirary/api.h

我的项目/api.h
我的项目/main.cpp

在 main.cpp 中:

#包括“api.h”
#include "mylibrary/api.h"

#include <boost/regex.hpp>

编译时:

g++ -I 图书馆/包括

于 2010-03-05T11:37:10.953 回答