我想在我的CMake项目中使用导入和内部库,以便项目不需要知道库的详细信息。 (通过“内部库”我的意思是其他CMake库目标,不确定正确的术语......)
信息应包含:
在某些项目中,我想写一些类似的东西:
SET(TARGET_DEPENDS ext_lib1 ext_lib2 internal_lib1)
让构建系统处理所有include文件夹和配置文件。
实现这一目标的最佳方法是什么?
AFAIK add_library(... IMPORTED)
支持其他所有内容,但包含文件夹信息。
答案 0 :(得分:0)
在构建“内部”库时,您还可以准备一个YourInternalLibraryConfig.cmake
文件,该文件准备用户“导入”库所需的所有内容。
在构建内部库或安装内部库时,需要创建此YourInternalLibraryConfig.cmake
。
在此YourInternalLibraryConfig.cmake
中,应调用add_library( YourInternalLibrary IMPORTED )
并确保所有属性都已正确准备。例如。它可以准备
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
,为您执行这三个步骤,也可以选择启用/禁用内部某些部分的开关。