我可以在Makefile中指定某些文件是源文件吗?

我可以在Makefile中指定某些文件是源文件吗?,makefile,gnu-make,Makefile,Gnu Make,一个工具用于编译idl。编译test.idl后,我们得到test.idl.h和test.idl.cc 我想在更新idl时重新编译它。但现在我遇到了一个循环依赖: Test.idl.cc => Test.idl ( use tool to generate Test.idl.cc ) Test.idl => Test.idl.o ( It's a implicit ru

一个工具用于编译idl。编译test.idl后,我们得到test.idl.h和test.idl.cc 我想在更新idl时重新编译它。但现在我遇到了一个循环依赖:

                Test.idl.cc  => Test.idl             ( use tool to generate Test.idl.cc )
                Test.idl     => Test.idl.o           ( It's a implicit rule !!! )
                Test.idl.o   => Test.idl.cc
然后,会发生一些奇怪的事情

我能做些什么来修复它?在实践中很难通过修改工具来更改输出文件名


是否可以将*.idl指定为源文件?那么make会忽略隐式规则吗?

但这不会有帮助,对吗?问题不是只生成了
Test.idl
,而是生成的文件和输入文件使用了相同的名称

没有修复方法,您需要更改源文件名或编译文件名

一个好方法是从下游组件中去掉
.idl

更新:


啊哈,好吧,您可以取消现有的隐式规则,该规则用于从.c文件生成无扩展名链接的文件。只定义一个没有配方的模式规则,如前所述

我对IDL一无所知,但我看不出循环依赖在逻辑上是如何可能的。如何从IDL生成C代码,反之亦然?只是一个将*.IDL编译为*.IDL的工具。{h,cpp}哦,我刚刚理解了你的问题。忘记我之前的评论吧。也许值得发布一个简单的Makefile来澄清混乱。例如,
test.idl.cc:test.idl touch$@
就足够了。它用于通过以下方式生成二进制:g++-o binary a.o b.o Test.idl.o