make[3]: *** No rule to make target ‘a.cpp‘, needed by ‘a.o‘.  Stop.

这篇博客详细记录了一次在自动化构建过程中遇到的编译问题。作者首先通过`touch`命令创建了一系列必要的文件,然后依次执行了`autoscan`、`aclocal`、`autoconf`、`autoheader`和`automake`等步骤来生成配置文件。在执行`configure`时,由于源文件从C++改为了C语言,导致原有的Makefile不再适用,出现了找不到目标文件'a.cpp'的错误。作者通过更改文件名并重新生成Makefile解决了这个问题。博客重点讨论了解决自动化构建中编译错误的思路和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#如果没有的话,就是创建下面文件。如果没有的话,会出错。
touch NEWS
touch README
touch AUTHORS
touch ChangeLog

#步骤2 autoscan
autoscan
#生成configure.scan,把configure.scan改成configure.ac,删除中括号。
#然后再添加下面的:
#AC_CANONICAL_SYSTEM
#AM_INIT_AUTOMAKE()
#AC_PROG_RANLIB

#步骤3 aclocal
aclocal
ls

#步骤4 autoconf
autoconf
ls

#步骤5 autoheader
autoheader
ls

#步骤6 创建Makefile.am文件
#上面完成了

#步骤7 automake
automake --add-missing

#步骤8 ./configure
./configure  --prefix=${install_path}  \
                CFLAGS=" -g -O2 "         \

#调试时 -O0 不优化,正常来说就不要啦!

#原来是a.cpp,a.hh文件。执行上面的命令,生成Makefile。执行configure时,自动使用g++,编译没问题。
#我把a.cpp改成a.c,a.hh改成a.h,然后把里面的代码改成c语言代码。执行configure时,自动使用gcc。但是编译的时候,总是提示下面的错误:
#  make[3]: *** No rule to make target 'a.cpp', needed by 'a.o'.  Stop.
#后面把a的名字改成b,重新生成Makefile,然后就好了。怎么理解?这也是我突然来灵感想出来的方法!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值