将包含文件信息添加到CMake中的库

时间:2012-12-03 14:24:00

标签: include cmake libraries

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

信息应包含:

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

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

 SET(TARGET_DEPENDS ext_lib1 ext_lib2 internal_lib1)

让构建系统处理所有include文件夹和配置文件。

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

  • 带有必要include-dirs的YourInternalLibrary_INCLUDE_DIRS变量。
  • 带有所需编译器定义的YourInternalLibrary_DEFINES
  • YourInternalLibrary_LIBRARIES总结所有所提供的库

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

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

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

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

的来源