CMake生成需要生成文件

时间:2019-08-08 14:39:22

标签: cmake protocol-buffers

我正在使用CMake在多个子目录中构建一个项目。有一个包含父CMakeLists文件的父目录,每个子目录包含其自己的CMakeLists文件。因此,我正在使用add_subdirectory命令来运行子目录。

我的问题是,其中一个子目录生成了另一个子目录才能构建的代码。具体来说,它是Google协议缓冲区。如果独立运行,该子目录中的CMakeLists文件将生成pb.ccpb.h文件,但是直到我这样做之前,我无法生成父CMake文件的缓存,因为它抱怨丢失了那些源文件。

目录结构如下:

/
--CMakeLists.txt
--protobuf/
----CMakeLists.txt
----src/
--main/
----CMakeLists.txt
----src/

main子目录需要由protobuf子目录生成的文件。

作为生成步骤的一部分,有没有办法让父CMakeLists文件构建子目录?还是以某种方式将protobuf文件标记为必需的,但是丢失了,因此生成不会失败?

1 个答案:

答案 0 :(得分:0)

您可以在包含主文件之前尝试以execute_process的形式运行此特定cmake文件。但这违反了设计的cmake用法。

正确的答案是使生成步骤成为构建过程的一部分。如果您可以发布一个最小的,可重现的问题示例,那么我可以为您提供直接解决问题的具体方法,而无需解决您的问题。