FootTarget.cmake和FindFoo.cmake之间的区别?
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
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
FooConfig.cmake
(调用find\u package
)
此脚本设置变量和/或导入的目标,可供主项目进一步使用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
脚本可以检查包版本(与请求的版本一起),解释组件的请求查找包
,定义主项目可用的函数/宏等。该脚本的示例可以在中找到