Makefile 指定“bin\u程序”的依赖项,而不告诉Automake如何生成“bin\u程序”`

Makefile 指定“bin\u程序”的依赖项,而不告诉Automake如何生成“bin\u程序”`,makefile,build,gnu-make,automake,Makefile,Build,Gnu Make,Automake,因此,在我的automake设置中,bin_程序的一些*.c文件依赖于通过从main.h创建符号链接而生成的no_common.h,现在,在我的Makefile.am最近做了一些更改之前,bin\u程序中包含了h,这样它就可以像应该的那样生成,但这也使得它可以与make生成的二进制文件一起安装到/usr/bin,这不是我想要的 我知道我可以在我的Makefile.am文件中使用类似的内容: $(bin_PROGRAMS): no_common.h 但这难道不意味着我必须告诉make我希望如何构

因此,在我的automake设置中,
bin_程序的一些
*.c
文件依赖于通过从
main.h
创建符号链接而生成的
no_common.h
,现在,在我的
Makefile.am
最近做了一些更改之前,
bin\u程序
中包含了h
,这样它就可以像应该的那样生成,但这也使得它可以与
make
生成的二进制文件一起安装到
/usr/bin
,这不是我想要的

我知道我可以在我的
Makefile.am
文件中使用类似的内容:

$(bin_PROGRAMS): no_common.h
但这难道不意味着我必须告诉
make
我希望如何构建
bin_程序?将
no\u common.h
放回
bin\u程序中,然后将其添加到
noinst\u头中,可以解决此问题吗

这是可以做到的吗?我是否可以使用其他一些棘手的技巧,或者我只是要求一些做不到的事情


注意:我不想将受影响文件中的文件
\include
no\u common.h
更改为
main.h
。(是的,我知道我可能很挑剔)

Automake提供了
内置源
变量来解决此问题

在编译之前,
build\u SOURCES
中提到的文件将在
make
的早期创建。然而,没有暗示其他依赖关系;也就是说,文件是创建的,但不是编译的,也不是任何其他特定
.o
的依赖项;这正是你想要的

因此,在您的情况下,您只需执行以下操作:

BUILT_SOURCES = no_common.h

Automake提供了
build\u SOURCES
变量来解决此问题

在编译之前,
build\u SOURCES
中提到的文件将在
make
的早期创建。然而,没有暗示其他依赖关系;也就是说,文件是创建的,但不是编译的,也不是任何其他特定
.o
的依赖项;这正是你想要的

因此,在您的情况下,您只需执行以下操作:

BUILT_SOURCES = no_common.h