如何在此高级 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.c
和 process-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 : 如何链接来自不同子目录的目标文件并包含不同的搜索路径