CMake使用目标的最佳实践

时间:2017-11-13 21:06:06

标签: boost makefile cmake libraries targets

我编译了所有的信息,现在我试图为一个超级项目实现CMake构建系统,我真的需要一个指导,将我通过阅读不同网站的CMake所获得的所有数据转换为实用知识< / p>

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

在多目录结构的情况下,我希望实现最大的可移植性,从而为每个目录设置目标,然后将这些不同的目标用作其他目录中其他目标的链接,我的目标是尽可能灵活,不要与某些目录结构,利用CMake来计算依赖关系,我只关心目标

我的最终目标是图书馆库

使用案例:

第一级目录{PROJECT}(2个文件夹):
CMakeLists.txt common_env源码 第一级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_libraries(mylib dstd)应该在不同的目录中工作,因为我的目标是dstd INTERFACE库,我需要Cmake通过查找此目标并链接它来解决此依赖关系

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

0 个答案:

没有答案