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

本文介绍了如何在CMake中使用C++标准和管理MathFunctions库的接口,包括区分头文件和源文件的链接方式,以及使用`target_compile_features`和`target_link_libraries`来设置C++标准和依赖关系。
摘要由CSDN通过智能技术生成

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()

SFML(Simple and Fast Multimedia Library)是一个跨平台的多媒库,用于开发2D游戏、形和音频应用程序。它提供了简单易用的接口,支持窗口管理、图形绘制、事件处理、音频播放等功能。 在使用SFML库时,可以使用CMake来进行项目的构建和管理。CMake是一个跨平台的构建工具,可以生成各种不同平台和编译器下的构建脚本。 下面是使用CMake构建SFML项目的一般步骤: 1. 创建一个新的文件夹作为项目的根目录。 2. 在项目根目录下创建一个CMakeLists.txt文件,用于描述项目的构建规则。 3. 在CMakeLists.txt文件中,使用`cmake_minimum_required`指令指定CMake的最低版本要求。 4. 使用`project`指令指定项目的名称。 5. 使用`find_package`指令查找并加载SFML库。 6. 使用`add_executable`指令添加可执行文件,并将源代码文件添加到可执行文件中。 7. 使用`target_link_libraries`指令将SFML库链接到可执行文件中。 8. 使用`install`指令将可执行文件安装到指定位置(可选)。 以下是一个简单的SFML项目的CMakeLists.txt示例: ``` cmake_minimum_required(VERSION 3.12) project(MySFMLProject) # 查找并加载SFML库 find_package(SFML 2.5 COMPONENTS graphics window system REQUIRED) # 添加可执行文件并将源代码文件添加到可执行文件中 add_executable(MySFMLApp main.cpp) # 将SFML库链接到可执行文件中 target_link_libraries(MySFMLApp sfml-graphics sfml-window sfml-system) # 可选:安装可执行文件到指定位置 install(TARGETS MySFMLApp DESTINATION bin) ``` 请注意,上述示例中的`main.cpp`是项目的源代码文件,你需要根据自己的项目结构和需求进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值