gpt4 book ai didi

c++ - 如何使用 IDL 编译器在临时目录中构建中间 C++ 文件?

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:51 24 4
gpt4 key购买 nike

我有一个调用 CORBA IDL 编译器生成 .cc 文件作为中间步骤的构建过程,我希望在临时目录中创建这些文件,以便使用 make clean 更轻松地进行清理。

我有以下有效的 automake 规则:

if MAKE_CORBA
IDLFLAGS = -bcxx

$(shell mkdir -p ${srcdir}/idlscratch/

%SK.cc: %.idl
$(IDLCC) $(IDLFLAGS) @^

EXTRA_CORBA_SOURCES = ${srcdir}/blahSK.cc

endif

此规则有效,但它将 .cc 文件放在 ${srcdir} 而不是 ${srcdir}/idlscratch/ 中,因此我将其更改为以下规则那行不通:

if MAKE_CORBA
IDLFLAGS = -bcxx -C${srcdir}/idlscratch/

$(shell mkdir -p ${srcdir}/idlscratch/

%SK.cc: %.idl
$(IDLCC) $(IDLFLAGS) @^

EXTRA_CORBA_SOURCES = ${srcdir}/idlscratch/blahSK.cc

endif

此规则应调用 IDL 编译器,使其在 ${srcdir}/idlscratch/ 中吐出 .cc/.hh 文件,但是,它似乎并没有调用编译器,而是我得到:

make[2]: *** No rule to make target `idlscratch/blahSK.cc', needed by `blahSK.o'. Stop.

但是,我发现,如果我手动调用 IDL 编译器并将 .hh/.cc 文件放在 ${srcdir}/idlscratch 目录中,编译就会成功完成。

因此,当 blahSK.cc 文件位于子目录中时,make 似乎无法将其识别为需要调用 IDL 编译器。

创建规则的正确方法是什么,当输出是子目录时,make 系统会正确调用 IDL 编译器?

最佳答案

这里的相关细节是“并将 .hh/.cc 文件放在 ${srcdir}/idlscratch 目录中”。这样做,它也会在 make 中工作。

问题是像 %SK.cc: %.idl 这样的规则需要 make(默认情况下)在同一位置找到目标及其先决条件以及源文件和所需的输出文件不再位于同一位置。

您可以通过多种方式解决这个问题。最简单的方法是使用 make 的 vpath 指令/功能来指示它在搜索先决条件时要搜索其他源目录。将 vpath %.idl ${srcdir} 添加到 makefile 中可能足以完成这项工作。

或者,您可以手动(以及半手动)创建各个输入和输出文件之间的关系,然后使用 %SK.cc: 规则(注意:没有 %.idl prereq 在此行)以提供构建 %SK.cc 文件的方法(使用之前设置的先决条件列表)。

关于c++ - 如何使用 IDL 编译器在临时目录中构建中间 C++ 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26169016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com