我正在使用 Flymake 进行 C 代码语法检查。如果 Makefile 和源文件位于同一目录下,则 Flymake 可以正常工作。但是如果 Makefile 在源代码的父目录中(就像在大多数 C 项目中一样),Flymake 似乎无法再找到 Makefile,并在*Flymake log*
缓冲区中产生以下消息:
Warning [flymake hello.c]: Disabling backend flymake-cc because make: *** No rule to make target `check-syntax'. Stop.
我使用的是 Flymake 的默认配置。用于测试的 C 源代码和 Makefile 列在本文末尾。我看到很多人都在为 Flymake 使用自定义的初始化函数。但我发现 Flymake 的默认初始化函数能够正确定位 Makefile,至少对于 C 项目是这样。例如,如果我flymake-proc-simple-make-init
在src/hello.c
缓冲区内进行评估,我会收到以下消息:
("make" ("-s" "-C" "../" "CHK_SOURCES=src/hello_140332961481000_flymake.c" "SYNTAX_CHECK_MODE=1" "check-syntax"))
该"-C" "../"
部分表示它知道 Makefile 位于上一级目录中。我不知道为什么它最终没有工作。
我想要实现的是:
- 使 Flymake 适用于下面测试项目中的所有源代码文件。
- 尽可能少的定制。
任何帮助,将不胜感激。
$ tree .
.
|-- Makefile
|-- main.c
`-- src
|-- hello.c
`-- hello.h
# Makefile
INCLUDE=src
check-syntax:
clang -fsyntax-only -Wall -I${INCLUDE} ${CHK_SOURCES} || true
/* main.c */
#include "hello.h"
int main(void)
{
hello()
return 0;
}
/* src/hello.c */
#include "hello.h"
#include <stdio.h>
void hello(void)
{
printf("hello\n")
}
/* src/hello.h */
#ifndef HELLO_H
#define HELLO_H
void hello(void);
#endif