我正在使用CMake在多个子目录中构建一个项目。有一个包含父CMakeLists文件的父目录,每个子目录包含其自己的CMakeLists文件。因此,我正在使用add_subdirectory
命令来运行子目录。
我的问题是,其中一个子目录生成了另一个子目录才能构建的代码。具体来说,它是Google协议缓冲区。如果独立运行,该子目录中的CMakeLists文件将生成pb.cc
和pb.h
文件,但是直到我这样做之前,我无法生成父CMake文件的缓存,因为它抱怨丢失了那些源文件。
目录结构如下:
/
--CMakeLists.txt
--protobuf/
----CMakeLists.txt
----src/
--main/
----CMakeLists.txt
----src/
main
子目录需要由protobuf
子目录生成的文件。
作为生成步骤的一部分,有没有办法让父CMakeLists文件构建子目录?还是以某种方式将protobuf文件标记为必需的,但是丢失了,因此生成不会失败?
答案 0 :(得分:0)
您可以在包含主文件之前尝试以execute_process
的形式运行此特定cmake文件。但这违反了设计的cmake用法。
正确的答案是使生成步骤成为构建过程的一部分。如果您可以发布一个最小的,可重现的问题示例,那么我可以为您提供直接解决问题的具体方法,而无需解决您的问题。