未找到 programname.c 的规则

Posted

技术标签:

【中文标题】未找到 programname.c 的规则【英文标题】:rules for programname.c not found 【发布时间】:2020-09-27 19:27:29 【问题描述】:

我正在尝试在我的项目中运行 automake 和 autoconf。但是,当我运行 make 时,我收到一个错误“inz.o 需要制作 inz.c 的规则”。但是我的项目中没有 inz.c。我想这可能是由于配置错误,但这是我第一次使用 autoconf/automake,所以我想寻求帮助。我在 Linux 下运行 结构如下:

inz (main folder)
-configure.ac
-inz.cbp
-inz.depend
-inz.layout
-Makefile.am
--src\main.cpp
--src\main.hpp
--src\packetcapture.cpp
--src\packetcapture.hpp
--src\packetprocess.cpp
--src\packetprocess.hpp
--src\Makefile.am

配置.ac:

AC_INIT([inz], 1.0)
AC_CONFIG_AUX_DIR([build])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT

Makefile.am:

SUBDIRS = src
dist_doc_DATA = README.md

src\Makefile.am:

bin_PROGRAMS = inz
inz_sources = main.cpp packetcapture.cpp packetprocess.cpp
include_HEADERS = main.hpp packetcapture.hpp packetprocess.hpp

编译项目本身的命令:(它也使用-lndpi -lpthread和-lpcap)

g++ -Wall -std=c++0x -Wunused -g -Wno-deprecated-declarations -Iinclude -I./ -c /inz/src/main.cpp -o obj/Debug/src/main.o
g++ -Wall -std=c++0x -Wunused -g -Wno-deprecated-declarations -Iinclude -I./ -c /inz/src/packetcapture.cpp -o obj/Debug/src/packetcapture.o

我运行来配置 automake/autoconf 的命令(来自主文件夹):

autoreconf --install
cd build
../configure
make

【问题讨论】:

摇摆:x\y 应该是 x\\y;或者更好的是 x/y -- 大多数 msdos 程序都知道正确的路径分隔符。 在linux下 听起来像 automake 可能会混淆 - 如果您将 bin_PROGRAMS = inz 更改为 bin_PROGRAMS = test,它是否会因 "no rules to make test.c required by test.o" 而失败?这可能与您的根目录中有一个以 inz 开头的文件有关。 是的,这是我更改 bin_PROGRAMS 时的确切失败错误。也许问题出在 Code::Blocks 生成的 cbp 文件上?不是cbp的问题,我试过了 【参考方案1】:

您需要小心变量名,因为它们区分大小写。

您声明了inz_sources,但这不是 automake 的特殊变量。 inz_SOURCES 会是。

如果没有特殊的_SOURCES 变量,automake 将继续假设inz 是从inz.c 构建的。但是你没有那个文件,所以它失败了。

【讨论】:

谢谢。我试试看 一切正常,但如何添加对外部库的依赖? -lndpi 或 -lpthread 您需要使用_LDADD 变量。 参见autotools.io/whosafraid.html 了解基于自动工具的最小项目设计。但这些问题也可能比你在这里问的要多。

以上是关于未找到 programname.c 的规则的主要内容,如果未能解决你的问题,请参考以下文章

未找到规则“导入/扩展”的 ESLint 定义

未找到规则“re​​act/require-extension”的定义

禁用未找到 eslint 规则的警告消息

Azure 存储。得到 403 [url](未启用 CORS 或未找到此请求的匹配规则。)

未找到规则“re​​act-hooks/exhaustive-deps”的定义

没有规则来制作 .o 文件