Boost CMake使用目标的最佳实践

Boost CMake使用目标的最佳实践,boost,makefile,cmake,libraries,targets,Boost,Makefile,Cmake,Libraries,Targets,我收集了所有的信息,现在我正在尝试为一个超级项目实施CMake构建系统,我真的需要一个指导,将我通过阅读不同站点的CMake而获得的所有数据转化为实际知识将是非常棒的 我有一个关于低估CMake目标的基本问题 在多目录结构的情况下,我希望实现最大的可移植性,因此每个目录都有目标,然后使用这些不同的目标作为另一个目录中其他目录的链接,我的目标是尽可能灵活,不与某个目录结构耦合,使用CMake来计算依赖关系,我只关心目标 我的最终目标是建立一个图书馆图书馆 用例: 一级目录{PROJECT}(2个文

我收集了所有的信息,现在我正在尝试为一个超级项目实施CMake构建系统,我真的需要一个指导,将我通过阅读不同站点的CMake而获得的所有数据转化为实际知识将是非常棒的

我有一个关于低估CMake目标的基本问题

在多目录结构的情况下,我希望实现最大的可移植性,因此每个目录都有目标,然后使用这些不同的目标作为另一个目录中其他目录的链接,我的目标是尽可能灵活,不与某个目录结构耦合,使用CMake来计算依赖关系,我只关心目标

我的最终目标是建立一个图书馆图书馆

用例:

一级目录{PROJECT}(2个文件夹):
CMakeLists.txt公共_环境源 ​ ​第一级CMakeLists.txt:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(dassys)

# iam using this because target scope change with sub-directory
include(common/CMakeLists.txt) 
include(src/CMakeLists.txt)

#Add Library
add_library(dassys INTERFACE)

#Creating library
target_link_libraries(dassys INTERFACE
  common
  src
  )

二级目录{{PROJECT}/common}(2个文件夹1个文件): cfgd_***CMakeLists.txt dstdh header.h

二级CMakeLists.txt

#Adding Subdirectory

include(${CMAKE_CURRENT_LIST_DIR}/dstdh/CMakeLists.txt)
include(${CMAKE_CURRENT_LIST_DIR}/cfgd_***/CMakeLists.txt)
#add_subdirectory(dstdh)
#add_subdirectory(cfgd_***)

#Add Library
add_library(common INTERFACE)

#Creating library
target_link_libraries(common INTERFACE
  dstdh
  cfgd_***
  )

----------------------------------------------------------------------------------------------------------------------------------
​Thrid Level directory { {PROJECT} /common/dstdh }(6 files ): 
CMakeLists.txt dassert.h  dfloat.h  dstdbit.h  dstdbool.h  dstdint.h  dstdio.h  dstring.h

Thrid Level CMakeLists.txt 



#Adding Library
add_library(dstdh INTERFACE )


target_sources(dstd INTERFACE
  ${CMAKE_CURRENT_LIST_DIR}/dassert.h
  ${CMAKE_CURRENT_LIST_DIR}/dfloat.h
  ${CMAKE_CURRENT_LIST_DIR}/dstdbit.h
  ${CMAKE_CURRENT_LIST_DIR}/dstdbool.h
  ${CMAKE_CURRENT_LIST_DIR}/dstdint.h
  ${CMAKE_CURRENT_LIST_DIR}/dstdio.h
  ${CMAKE_CURRENT_LIST_DIR}/dstring.h
  )

#Add include for Header only library
target_include_directories(dstdh INTERFACE
  "${CMAKE_CURRENT_LIST_DIR}/dstdh/"
  )

这是我的问题,我需要链接到另一个目录中的dstd库

如何做到这一点,因为据我所知

target_link_库(mylib dstd)应该在不同的目录下工作,因为我有target,它是dstd接口库,我需要Cmake通过找到这个目标并针对它进行链接来解决这个依赖关系


我得到编译错误,因为在编译mylib时未找到dstdint.h

看起来像是
目标包含目录的参数
应该是
${CMAKE_CURRENT_LIST_DIR}
,而不是
${CMAKE_CURRENT_LIST_DIR}/dstdh/
,因为当前目录已经是
/common/dstdh
。顺便说一句,在变量CMAKE_CURRENT_LIST_DIR中,它主要用于
include()
-ed脚本;在
CMakeLists.txt
脚本(与
add_subdirectory()
一起添加)中,通常使用CMAKE_CURRENT_SOURCE_DIR。