Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 如何使安装目标依赖于生成的(protobuf)文件_Cmake_Dependencies - Fatal编程技术网

Cmake 如何使安装目标依赖于生成的(protobuf)文件

Cmake 如何使安装目标依赖于生成的(protobuf)文件,cmake,dependencies,Cmake,Dependencies,我们有一个项目,在这个项目中,我们有不同的应用程序,它们带有protobuf定义,我们提供了python绑定作为副作用。我们遇到了一个问题,当我们想将它们与软件的其余部分一起安装时,cmake抱怨要创建的绑定不存在 这是一个行为错误的最小示例: // foo.proto message Foo { uint32 foo = 1; } # CMakeLists.txt project(foobar) cmake_minimum_required(VERSION 3.16) find_p

我们有一个项目,在这个项目中,我们有不同的应用程序,它们带有protobuf定义,我们提供了python绑定作为副作用。我们遇到了一个问题,当我们想将它们与软件的其余部分一起安装时,cmake抱怨要创建的绑定不存在

这是一个行为错误的最小示例:

// foo.proto
message Foo {
    uint32 foo = 1;
}

# CMakeLists.txt
project(foobar)
cmake_minimum_required(VERSION 3.16)

find_package(Protobuf REQUIRED)

protobuf_generate_cpp(FOO_SRC FOO_HDR foo.proto)
protobuf_generate_python(FOO_PY foo.proto)

install(FILES ${FOO_PY} DESTINATION "share/proto/")

$ make install
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/foobar
Install the project...
-- Install configuration: ""
CMake Error at cmake_install.cmake:41 (file):
  file INSTALL cannot find "/tmp/foobar/foo_pb2.py": No such file or
  directory.

当我运行
makeinstall
时,如何说服CMake构建绑定?

函数
protobuf\u generate\u cpp
protobuf\u generate\u python
实际上是创建自定义命令()。这在这些功能的中有所说明

要使自定义命令正常工作,它应该是某个目标,该目标使用自定义命令创建的文件(或取决于该文件)

protobuf\u generate\u cpp
的情况下,通常使用
add\u library
/
add\u executable
命令执行消耗

但是可以创建一个依赖于给定文件的自定义目标:

protobuf\u generate\u cpp(FOO\u SRC FOO\u HDR FOO.proto)
protobuf_generate_python(FOO_PY FOO.proto)
添加自定义目标(原型目标全部依赖${FOO\u SRC}${FOO\u HDR}${FOO\u PY})

是否可以拆分
add\u custom\u target
声明和依赖项?我试着做一个
add_custom_target(proto_target ALL)
,然后是
add_target_依赖项(proto_target${FOO_PY})
,但这不起作用,而
add_custom_target(proto_target ALL dependensited${FOO_PY})起作用。这是一个更大系统的一部分,如果我只需要引入一个目标,并在以后添加依赖项(这是一些内部函数的一部分,我不想创建很多目标),这对我来说是很方便的。此外,我不知道在文档中的何处搜索此行为。在创建自定义目标时,只能使用
dependence
子句指定文件的依赖关系。此外,如果文件是由
add_custom_命令
生成的,则只能将其添加到同一目录中的目标:这在中有明确说明。但在任何时候,您都可以使用命令“附加”到其他目标。