1

我想在我的 CMake 项目中使用导入的和内部的库,这样项目就不需要知道库的详细信息。(“内部库”是指其他 CMake 库目标,不确定正确的术语......)

信息应包含:

  • 每种配置类型的库位置(包括 dll 和 .pdb 文件)
  • 库包含文件夹

在某些项目中,我想写一些类似的东西:

 SET(TARGET_DEPENDS ext_lib1 ext_lib2 internal_lib1)

并让构建系统处理所有包含文件夹和配置内容。

实现这一目标的最佳方法是什么?

AFAIKadd_library(... IMPORTED)支持几乎所有其他内容,但包含文件夹信息。

4

1 回答 1

0

在构建“内部”库时,您还可以准备一个YourInternalLibraryConfig.cmake文件,该文件准备好用户“导入”库所需的所有内容。

YourInternalLibraryConfig.cmake需要在构建内部库或安装它时创建。

在此YourInternalLibraryConfig.cmake,它应该调用add_library( YourInternalLibrary IMPORTED )并确保所有属性都已正确准备。例如它可以准备

  • 具有YourInternalLibrary_INCLUDE_DIRS必要包含目录的变量。
  • aYourInternalLibrary_DEFINES具有所需的编译器定义
  • YourInternalLibrary_LIBRARIES总结提供的所有

这样,您内部库的用户(例如主应用程序)可以简单地调用:

find_package( YourInternalLibrary )
include_directories( ${YourInternalLibrary_INCLUDE_DIRS} )
add_definitions( ${YourInternalLibrary_DEFINES} )
target_link_library( main ${YourInternalLibrary_LIBRARIES} )

对于更复杂的项目,您可以选择生成一个单独UseYourInternalLibrary.cmake的为您执行这三个步骤的项目,可选择启用/禁用内部某些部分的开关。

有关一些好的示例,请查看VtkOpenCV的源代码

于 2012-12-03T21:11:31.103 回答