CMake官方教程3--对库加入使用限制

1. 对库加入限制

  • CMakeFile.txt
cmake_minimum_required(VERSION 3.10)

# set the project name and version
project(Tutorial VERSION 1.0)


# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)

configure_file(TutorialConfig.h.in TutorialConfig.h)
add_subdirectory(MathFunctions)


add_executable(Tutorial tutorial.cxx)


target_link_libraries(Tutorial PUBLIC MathFunctions)

target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           #${EXTRA_INCLUDES}
                           )
                                         
                                                  
  • MathFunctions/CMakeLists
add_library(MathFunctions MathFunctions.cxx)                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                     
target_include_directories(MathFunctions INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")                                                                                                                                          
                                                                                                                                                                                   
option(USE_MYMATH "Use tutorial provided math implementation" ON)                                                                                                                                                          
if (USE_MYMATH)                                                                                                                                                                                                            
  target_compile_definitions(MathFunctions PRIVATE "USE_MYMATH")                                                                                                                                                           
                                                                                                                                                                                           
  add_library(SqrtLibrary STATIC                                                                                                                                                                                           
              mysqrt.cxx                                                                                                                                                                                                   
              )                                                                                                                                                                                                            
                                                                                                                                                                                                                           
 
target_include_directories(MathFunctions INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")


option(USE_MYMATH "Use tutorial provided math implementation" ON)
if (USE_MYMATH)
  target_compile_definitions(MathFunctions PRIVATE "USE_MYMATH")

  add_library(SqrtLibrary STATIC
              mysqrt.cxx
              )

  target_link_libraries(MathFunctions PRIVATE SqrtLibrary)
endif()
                                                                                                                                                                                                                                    
                                                    

对于一个库如果只用头文件,则声明为 I N T E R F A C E INTERFACE INTERFACE;
如果只要源文件,则声明为 P R I V A T E PRIVATE PRIVATE;
否则使用 P U B L I C PUBLIC PUBLIC

2. 使用接口库设置C++标准

  • CMakeLists.txt
cmake_minimum_required(VERSION 3.10)

project(Tutorial VERSION 1.0)


# specify the C++ standard
add_library(tutorial_compiler_flags INTERFACE)
target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)


configure_file(TutorialConfig.h.in TutorialConfig.h)

add_subdirectory(MathFunctions)

add_executable(Tutorial tutorial.cxx)

target_link_libraries(Tutorial PUBLIC MathFunctions tutorial_compiler_flags)

target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           #${EXTRA_INCLUDES}
                           )

target_comiler_flags INTERFACE是一个接口库不会产生编译目标

  • Mathfunctions/CMakeLists.txt
add_library(MathFunctions MathFunctions.cxx)


target_include_directories(MathFunctions INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}")


option(USE_MYMATH "Use tutorial provided math implementation" ON)
if (USE_MYMATH)
  target_compile_definitions(MathFunctions PRIVATE "USE_MYMATH")

  add_library(SqrtLibrary STATIC
              mysqrt.cxx
              )

  target_link_libraries(SqrtLibrary PUBLIC tutorial_compiler_flags)
  target_link_libraries(MathFunctions PUBLIC SqrtLibrary)
endif()

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值