Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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
FootTarget.cmake和FindFoo.cmake之间的区别?_Cmake - Fatal编程技术网

FootTarget.cmake和FindFoo.cmake之间的区别?

FootTarget.cmake和FindFoo.cmake之间的区别?,cmake,Cmake,CMake通过添加等方式自动创建FooTarget.CMake文件 install(EXPORT FooTargets FILE FooTargets.cmake NAMESPACE Foo:: DESTINATION lib/cmake/Foo ) 进入名为Foo的库的CMakeLists.txt。FooTargets.cmake和FindFoo.cmake之间有什么区别?对于上面的代码片段,FooTarget.cmake通过在build目录中运行sudo make instal

CMake通过添加等方式自动创建
FooTarget.CMake
文件

install(EXPORT FooTargets
  FILE FooTargets.cmake
  NAMESPACE Foo::
  DESTINATION lib/cmake/Foo
)
进入名为Foo的库的
CMakeLists.txt
FooTargets.cmake
FindFoo.cmake
之间有什么区别?对于上面的代码片段,
FooTarget.cmake
通过在build目录中运行
sudo make install
自动安装


然而,这样的库似乎不一定是通过
find\u包(Foo)
找到的。如果此
FooTarget.cmake
文件不能自动发现库,那么它的意义何在?由于库是由CMake生成的,因此CMake本身似乎应该知道如何生成
FindFoo.CMake
库,使库能够由使用CMake的其他项目自动发现,并将其放在平台上应该去的地方。

使用
find_package(Foo)发现包
包括两个步骤:

  • 使用,
    find_package
    查找描述包的脚本
    FooConfig.cmake

  • cmake在主项目的上下文中处理脚本
    FooConfig.cmake
    (调用
    find\u package

    此脚本设置变量和/或导入的目标,可供主项目进一步使用

  • cmake生成的脚本
    FooTarget.cmake
    在第二步中有帮助。此脚本打算包含在
    FooConfig.cmake
    中(与
    include()
    )。当cmake处理
    footTarget.cmake
    时,它将创建导入的目标并设置其属性

    因此,非常基本的
    FooConfig.cmake
    脚本只包含一行:

    include("${CMAKE_CURRENT_LIST_DIR}/FooTarget.cmake")
    
    并使用
    install(FILES)
    安装到
    find_package
    可以定位脚本的目录中(一个目录
    lib/cmake/Foo
    非常适合此目的)

    FooConfig.cmake
    脚本的简单内容意味着它将安装在包含在其中的
    FooTarget.cmake
    脚本附近

    更复杂的
    FooConfig.cmake
    脚本可以检查包版本(与请求的版本一起),解释
    组件的
    请求
    查找包
    ,定义主项目可用的函数/宏等。该脚本的示例可以在中找到