如何使用 Autotools 生成的 Makefile 在 Vim 中编译单个 C 文件

Posted

技术标签:

【中文标题】如何使用 Autotools 生成的 Makefile 在 Vim 中编译单个 C 文件【英文标题】:How to Compile Single C file in Vim using Makefile Generated by Autotools 【发布时间】:2016-03-13 03:49:21 【问题描述】:

如果在我的 Makefile.am 中,我有一组假设命名的源:

lib_LTLIBRARIES = libmy_tutorial.la                                           
libmy_tutorial_la_SOURCES = \                                                 
  jump_table.h jump_table.c \                                                  
  core.h core.c \                                                
  my_dynapi.c                                                                   

bin_PROGRAMS = main                                                            
main_SOURCES = main.c                                                          
main_LDADD = libmy_tutorial.la                                     

CLEANFILES = *.o  

我在 Vim 中。如果我的 Makefile 是从上面的 Makefile.am 生成的,有没有办法在单个目标上调用 :make

例如:

:make main.o

只能从 bin_PROGRAMS 编译 main.c 吗?

就像我跑了一样:

gcc -c -o main.o $(CFLAGS) $(CPPFLAGS) main.c

【问题讨论】:

我很困惑。这里有什么问题? @FDinoff 我很抱歉。我想对文件进行更改。然后在 vim 中输入 :make 并只编译该文件。这样我可以在编写给定模块时测试语法错误。如果我的项目有几个包含目录并在我的 Makefile 中指定了定义,我希望它们适用于这个“单文件编译”。请让我知道有什么不清楚的地方,以便我在我的问题中更清楚地说明。 :make main.o 不起作用吗?或者你想要更自动化的东西?像:set makeprg=make\ %<.o 这样的东西可能会起作用。 @FDinoff 因为我的 Makefile 是由 automake 生成的,所以在 vim 中运行 :make main.o 时,我得到了 make: *** No rule to make target 'main.o'. Stop.。我假设这是因为自动生成的 Makefile 中没有明确的规则。如果我运行 :make 来构建所有目标文件,并进行链接等(也称为完整构建)。使用:set makeprg 可能有效,但如果我想做make all,我必须将其切换回默认值? 你是先生成makefile的吗?如果不是,您可能想先生成它 【参考方案1】:

由于您使用的是 Libtool,因此您的目标是 .lo 文件而不是 .o 文件。调用make main.lo,或make libmy_tutorial_la-main.lo,如果你使用的是每个目标CFLAGS

【讨论】:

以上是关于如何使用 Autotools 生成的 Makefile 在 Vim 中编译单个 C 文件的主要内容,如果未能解决你的问题,请参考以下文章

Autotools 交叉编译和生成源

使用 Autotools 调用外部脚本

使用 autotools 生成未定义的参考错误,而自定义 Makefile 工作正常

GNU autotools自动生成Makefile 介绍

如何制作一个makefile文件

Linux autotools有啥用