【发布时间】:2020-07-03 10:05:56
【问题描述】:
我有非 C/C++ 的自定义源文件。这些文件被编译成 C 源文件,然后这些 C 文件像往常一样被 cmake 编译。
但是,我的自定义文件可能具有在开发过程中会发生变化的依赖项。
例如让我们说我有文件source1.lang、source2.lang、source3.lang...
source1.lang
... some code
source2.lang
import source1;
... some code
我将这些文件编译为
./langc source1.lang
./langc source2.lang
...
我得到source1.c,source2.c ...
现在,如您所见,source2.lang 依赖于source1.lang。我可以通过预处理这些自定义文件随时找到这些依赖项。然后在source1.lang 上生成source2.lang 的显式依赖,以便在修改source1.lang 时重新编译。
现在,我有一个这样的自定义命令
# This is populated automatically.
set(SOURCE2_DEPENDS source2.lang source1.lang)
add_custom_command(
DEPENDS ${SOURCE2_DEPENDS }
COMMAND ./langc source2.lang
OUTPUT source2.c
COMMENT "Compiling source2.c"
)
问题是依赖关系可能在开发过程中发生变化。即SOURCE1_DEPENDS配置后可以更改。比如我可以修改source2.lang来导入source3.lang
source2.lang
import source1;
import source3;
... some code
我现在可以看到 source2.lang 已修改。所以我预处理它以找到新的依赖项。但是如何让 cmake 知道依赖项发生了变化呢?
到目前为止,我能看到的唯一方法是 Makefile 生成器修改生成的 build.make 文件以手动添加和删除这些依赖项。
但是,我怎样才能以通用的方式告诉 cmake 这些是新的依赖项?
基本上,当您将新的#include 添加到 C 源文件时,cmake 通常会这样做。这样其他生成器也可以使用。
【问题讨论】:
标签: cmake