未找到 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 的规则的主要内容,如果未能解决你的问题,请参考以下文章
未找到规则“react/require-extension”的定义
Azure 存储。得到 403 [url](未启用 CORS 或未找到此请求的匹配规则。)