我正在开发一个使用automake构建系统的相对较大的项目。
现在问题是我需要将项目与来自另一个项目的库链接(这很好),但我还需要包含来自其他项目源代码树(api.h
)的头文件。
INCLUDES = -I@REMOTE_PROJECT_DIR@
不起作用,因为在远程源目录中存在具有共名的.h文件。如何只添加api.h
?
我在项目的include目录中使用了一个符号链接,但现在我需要将源代码推送到一个公共仓库,每个使用它的人都将另一个项目放在另一个目录中,所以我需要使用configure param。
答案 0 :(得分: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)
答案 1 :(得分:0)
如果您的标题名称相同,则可以将其中至少一个放入具有不同名称的目录中,并使用目录名称包含它。
这是一个示例目录结构:
mylibrary/include/myblirary/api.h myproject/api.h myproject/main.cpp
在main.cpp中:
#include "api.h" #include "mylibrary/api.h" #include <boost/regex.hpp>
编译时:
g ++ -I mylibrary / include