如何在此高级 makefile 中链接两个 .c 文件?

Posted

技术标签:

【中文标题】如何在此高级 makefile 中链接两个 .c 文件?【英文标题】:How to link two .c files in this advanced makefile? 【发布时间】:2013-06-29 10:29:00 【问题描述】:

我想使用在libvmi/driver/xen.c 文件、process-list.c file 中定义的一些函数,但我不知道应该在 Makefile 的哪个位置链接这两个 ".c" 文件。 我知道如何在一个简单的 Makefile 中做到这一点,但我在这个 Makefile 中找不到类似的东西来添加 libvmi/driver/xen.cprocess-list.c 的链接部分。 该 Makefile 属于具有多个 Makefile 的项目。

感谢您的帮助!

    ## Source directory

SUBDIRS = 

INCLUDES = -I$(top_srcdir)
AM_LDFLAGS = -L$(top_srcdir)/libvmi/.libs/
LDADD = -lvmi -lm $(LIBS)
c_sources = process-list.c \ 
            libvmi/driver/xen.c
bin_PROGRAMS = module-list process-list map-symbol map-addr dump-memory
module_list_SOURCES = module-list.c
process_list_SOURCES = $(c_sources)
map_symbol_SOURCES = map-symbol.c
map_addr_SOURCES = map-addr.c
dump_memory_SOURCES = dump-memory.c

【问题讨论】:

您在上面发布的不是Makefile。这用于生成一个。 你能更详细地描述你想要完成的任务吗? @meaning-matters:我在另一个名为 process-list.c 的文件中使用了一个在 xen.c 文件中声明的函数。但是编译它会返回错误,没有定义对函数“foo”的引用。(正如我在 xen.c 中所说的那样声明)我想我应该以某种方式链接它们的目标文件。但我不知道如何在这个 Makefile 中做到这一点。 【参考方案1】:

您不需要链接两个.c 文件,您需要编译它们然后链接.o 文件。如果您的项目 makefile 已生成,这可能会自动发生,否则您主要需要将新的 .c 文件添加到构建中。

【讨论】:

devnull:对不起,你完全正确!现在我添加了“c_sources = process-list.c libvmi/driver/xen.c”,然后将“process_list_SOURCES = process-list.c”更改为您在上面看到的但它返回错误“make [3]:***没有规则可以设定目标libvmi/driver/xen.c', needed by libvmi/driver/xen.o'。停止。” @Karthik T:是的,我的意思也是目标文件。 xen.o 在另一个目录“libvmi/driver/xen.o”和 process-list.o,too.both 中创建在不同的目录中。我现在不知道如何以及在哪里链接它们。 如果它在不同的文件夹中编译,那么你只需要找出链接。如果它们在不同的目录中,那么它们很可能在不同的 Makefile 中。可能它们不会自动链接.. @Karthik T:是的,它们位于不同的 Makefile 中。我正在尝试找到一种方法来链接它们的 .o 文件。

以上是关于如何在此高级 makefile 中链接两个 .c 文件?的主要内容,如果未能解决你的问题,请参考以下文章

makefile : 如何链接来自不同子目录的目标文件并包含不同的搜索路径

c++ - 如何使用make链接c ++中不同目录中的对象而不在makefile中引用它们?

makefile : 如何链接目标文件

C 高级编程4 makefile 与 IO

陈皓一起写Makefile 概述

Makefile 学习笔记