【问题标题】:Setup makefile to check both c and c++ source files with emacs flymake设置 makefile 以使用 emacs flymake 检查 c 和 c++ 源文件
【发布时间】:2013-12-04 13:58:15
【问题描述】:

我正在尝试使用 flymake 设置语法检查,并且我已经完成了基本设置。

我的flymake的makefile如下:

INCLUDES = -I ./inc ## list of more includes omitted for brevity
.PHONY: check-syntax
check-syntax:
    gcc -Wall -Wextra -pedantic -fsyntax-only -Wno-variadic-macros -std=c99 $(INCLUDES) $(CHK_SOURCES)

这适用于我的 C 源代码。

现在如何为 C++ 使用相同的 makefile 和相同的检查语法目标?我不能将多个 -std 选项(如 -std=c99 -std=c++98)设置为同一个 gcc 调用,或者可以吗?我需要使用一些条件吗?我不能在同一个 Makefile 上有多个检查语法目标。

【问题讨论】:

  • 您可以让check-syntax 依赖于多个其他目标:check-syntax: check-syntax-c check-syntax-cpp

标签: c++ c emacs makefile flymake


【解决方案1】:

你可以把它分成两个目标:

check-syntax: check-syntax-c check-syntax-cxx

然后在一个目标中使用 C 编译器和 C 标志检查语法,并在另一个目标中使用 C++ 和 C++ 标志。

尽管您必须将源代码拆分为 C 和 C++ 源代码,但无论如何您都应该这样做。


如果您还没有拆分文件,您可以使用名为 filter 的 GNU Make text function 拆分源代码:

CHK_SOURCES_C   = $(filter %.c,$(CHK_SOURCES))
CHK_SOURCES_CXX = $(filter %.cpp,$(CHK_SOURCES))

【讨论】:

  • 实际上 C 和 C++ 已经被分割成不同的文件夹,这些文件夹有不同的 makefile,但我不想为每个文件夹添加 flymake 支持。相反,我想指示 flymake 仅使用顶级 makefile。在这种情况下,CHK_SOURCES 包含任何 flymake 正在输入的内容。所以它可能包含一个 c 或 c++ 源文件名。
  • @teroi 更新了如何拆分为 C 和 C++ 源文件的答案。
  • 啊,现在我明白你的意思了。我知道过滤功能;只是没有想到这一点......这实际上是一个非常干净的解决方案。我会试驾一下。
  • 好的,已经很好了,但它正在尝试构建 check-syntax-c 和 check-syntax-cpp 目标,即使 CHK_SOURCES_C 或 CHK_SOURCE_CXX 为空...
  • 还必须注意的是,flymake 会生成它要编译的文件的临时副本。例如,任何 .c 文件都将被复制到 .c_flymake。因此,在拆分源时,我们需要使用 %.c_flymake 和 %.cpp_flymake 模式过滤 CHK_SOURCES。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
相关资源
最近更新 更多