首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Makefile向Postgresql添加新的源代码文件

使用Makefile向Postgresql添加新的源代码文件
EN

Stack Overflow用户
提问于 2011-12-04 19:38:37
回答 1查看 1.4K关注 0票数 1

我正在为Postgresql中的存储管理器模块添加一些功能。我已经在smgr文件夹中添加了几个源文件,并且我能够通过将它们的名称添加到smgr文件夹中Makefile的OBJS列表中,使Make系统包含它们。(即,当我添加A.c时,我会将A.o添加到OBJS列表中)。

它工作得很好。现在,我正在尝试向项目中添加一个新文件hdfs_test.c。这个文件的问题在于,它在编译命令(-I和-L指令)中需要一些额外的指令。

gcc的命令是:

代码语言:javascript
复制
gcc hdfs_test.c -I/HDFS_HOME/hdfs/src/c++/libhdfs -I/usr/lib/jvm/default-java/include -L/HDFS_HOME/hdfs/src/c++/libhdfs -L/HDFS_HOME/build/c++/Linux-i386-32/lib -L/usr/lib/jvm/default-java/jre/lib/i386/server -ljvm -lhdfs -o hdfs_test

因此,简单地将hdfs_test.o添加到OBJS列表是行不通的。我尝试编辑Makefile,使其看起来像这样:

代码语言:javascript
复制
OBJS = md.o smgr.o smgrtype.o A.o B.o hdfs_test.o

MyRule1 : hdfs_test.c
gcc tati.c -c -I/diskless/taljab1/Workspace/HDFS_Append/hdfs/src/c++/libhdfs -I/usr/lib/jvm/default-java/include -L/diskless/taljab1/Workspace/HDFS_Append/hdfs/src/c++/libhdfs -L/diskless/taljab1/Workspace/HDFS_Append/build/c++/Linux-i386-32/lib -L/usr/lib/jvm/default-java/jre/lib/i386/server -ljvm -lhdfs

但它不起作用,并且我不断收到Make尝试编译hdfs_test.c而不包括指令的错误消息。

我如何强制Make来包含我的hdfs_test.c编译指令?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2011-12-04 21:00:43

您不需要在编译时传递-l-L,只需要在链接时传递。在编译时,只需要-I (包含路径)指令来帮助编译器找到任何额外的头文件。

您应该将源文件编译为.o文件,与所有其他文件一样。然后,在调用链接器以创建postgres可执行文件时,将-L-l指令添加到链接命令行。这意味着您需要在src/backend/storage/smgr/Makefile中编辑的所有内容就是添加输出对象的OBJS行,正如您在下面所做的那样。删除您的自定义规则,它是不必要的,也是不正确的。

只需将额外的库添加到$(LIBS) make变量,并通过src/Makefile.global-L路径添加到$(LDFLAGS)即可。src/Makefile.global是由configuresrc/Makefile.global.in生成的,所以你实际上需要修改configure的行为来添加你的includes,库路径和库。也不要直接编辑configure;编辑configure.in,然后用autoconf重新生成它。

是的,GNU Autotools有时被称为自动地狱是有原因的。有点..。有趣的是。有时,在做简单的事情时可能会有很多间接的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8375015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档