其他分享
首页 > 其他分享> > CMake 教程(Step 3): 为库添加使用需求

CMake 教程(Step 3): 为库添加使用需求

作者:互联网

注:

使用需求(Usage Requirements)允许更好地控制库或可执行文件的链接关系和包含关系,同时也可以在CMake中对目标的传递属性进行更多的控制。涉及使用需求的主要命令有:

让我们用新式CMake方法来重构从上一节的代码. 首先, 任何链接到MathFunctions的目标都需要包含当前源目录,而MathFunctions库本身则不需要。这种叫接口形式(INTERFACE)的使用需求.INTERFACE意味着构建时,需求方(consumers)需要而生产方(producer)不需要的东西。对MathFunctions/CMakeLists.txt修改如下:

add_library(MathFunctions mysqrt.cxx)
target_include_directories(MathFunctions INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

现在,我们已经指定了MathFunctions的使用需求,我们可以安全地从顶层CMakeLists.txt中删除EXTRA_INCLUDES变量,如下:

...
target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")
...
if(USE_MYMATH)
  add_subdirectory(MathFunctions)
  list(APPEND EXTRA_LIBS MathFunctions)
endif()
...

我的一点看法:

  • 关于target_include_directories(INTERFACE)确实有点绕, 这种设计真的是有点不可理解. 记住就好了.
  • 对于于"Step2", 可能看不出太大区别, 但如果换一个大型项目的话, 我们不再需要在顶层的CMakeLists.txt中挨个添加包含.

点击状态栏的Build按钮, 重新构建.

标签:CMake,target,directories,MathFunctions,Step,INTERFACE,include,为库
来源: https://blog.csdn.net/falwat/article/details/122275973