CMake使用外部项目目标运行自定义命令

4uqofj5v  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(316)

我的项目中有一个子项目,用于生成项目中使用的代码,但我希望使用ExternalProject将其包含在内,以便可以构建和运行它,而不管我为主项目使用的工具链如何。
除了我不知道如何在add_custom_command中使用它之外,它基本上可以工作,因为我希望它使用文档中指定的目标规则:
如果COMMAND指定了一个可执行文件目标名称(由add_executable()命令创建),它将自动替换为在构建时创建的可执行文件的位置[...]
复制问题的项目设置的简单示例:https://godbolt.org/z/of8G4c4Gf
用一个简单的add_subdirectory替换ExternalProject_Add可以让它工作,但是在使用不同的工具链的情况下,它不会做我想要的事情。

xxe27gdn

xxe27gdn1#

ExternalProject_Add将添加codegen目标。但是,CMake不知道该目标在做什么以及它将提供什么输出,因为该信息现在隐藏在外部CMake运行中。因此外部CMake运行不知道该步骤生成的codegen二进制文件以及它将位于何处。您需要手动提供add_custom_command可执行文件的完整路径。
ExternalProject_Add将构建codegen并将生成的二进制文件放在构建目录的子目录中。确切位置取决于工具链,因此重建完整的目标路径可能会很棘手。解决此问题最可靠的方法是:
1.在codegen项目中添加一个安装步骤,这将允许您方便地指定安装的二进制文件将在相对于安装根目录的路径中结束。
1.将ExternalProject_Add上的INSTALL_DIR选项设置为PROJECT_BINARY_DIR内的子目录。
1.在外部CMake项目的自定义命令中硬编码已安装的codegen二进制文件的完整路径。要在多个平台上工作,您可能需要使用the CMAKE_EXECUTABLE_SUFFIX variable

相关问题