如何使用 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 文件的主要内容,如果未能解决你的问题,请参考以下文章