CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

在这里插入图片描述

—— 杭州 2024-03-20 凌晨1:06


在这里插入图片描述

code review!

1.通用CMakeLists.txt模板

在这里插入图片描述

代码

# 设置CMake的最低版本要求
cmake_minimum_required(VERSION 3.0)

# 设置项目名称和版本
project(MyProject)

# 设置C++标准
set(CMAKE_CXX_STANDARD 11)

# 假设你的库文件名为libmylibrary.a (静态库) 或 libmylibrary.so (动态库)
# 并且库文件位于项目的third_party目录下

# 添加自己的库的头文件目录
include_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/include)

# 添加自己的库的库目录
link_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/lib)

# 指定生成目标
add_executable(${PROJECT_NAME} src/main.cpp)

# 链接库到你的可执行文件
target_link_libraries(${PROJECT_NAME} mylibrary)

2.GPT4给出的改进建议

这个CMakeLists.txt文件看上去基本是正确的,但是有几个小地方可能需要根据具体情况进行调整。以下是一个加了注释和可能需要注意的地方的版本:

# 设置CMake的最低版本要求
cmake_minimum_required(VERSION 3.0)

# 设置项目名称和版本
project(MyProject VERSION 1.0.0) # 如果你需要指定版本号,应该这样设置

# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True) # 确保使用了C++11

# 假设你的库文件名为libmylibrary.a (静态库) 或 libmylibrary.so (动态库)
# 并且库文件位于项目的third_party目录下

# 添加自己的库的头文件目录
include_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/include)

# 添加自己的库的库目录
# 注意: 在现代CMake中,更推荐使用target_link_directories和target_link_libraries结合使用
# link_directories应该尽量避免使用,因为它是全局的,会影响所有的target
link_directories(${PROJECT_SOURCE_DIR}/third_party/mylibrary/lib)

# 指定生成目标
add_executable(${PROJECT_NAME} src/main.cpp)

# 链接库到你的可执行文件
# 如果mylibrary是第三方库,且你没有使用add_subdirectory或find_package来包含它,
# 你可能需要使用find_library来查找库文件的确切位置
target_link_libraries(${PROJECT_NAME} mylibrary)

注意事项:

  1. 如果你有多个版本的mylibrary库,并且希望确保链接到正确的版本,可能需要更详细地指定库文件的路径或版本。
  2. 如果mylibrary是动态链接库,确保在运行时它可以在系统的库路径中找到,或者设置LD_LIBRARY_PATH环境变量等。
  3. 如果是跨平台项目,一些路径可能需要根据操作系统进行调整,例如使用CMAKE_PREFIX_PATH
  4. 现代CMake推荐使用target-specific命令如target_include_directoriestarge

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 04:50:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 04:50:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 04:50:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 04:50:01       20 阅读

热门阅读

  1. Vue2的生命周期

    2024-03-24 04:50:01       16 阅读
  2. 华为OD机试 C++ -采样过滤

    2024-03-24 04:50:01       19 阅读
  3. im-system 第八章

    2024-03-24 04:50:01       20 阅读
  4. vue3父组件给子组件传值,并在子组件接受

    2024-03-24 04:50:01       19 阅读
  5. LeetCode hot100-17

    2024-03-24 04:50:01       20 阅读
  6. 食品输送带的材质

    2024-03-24 04:50:01       20 阅读
  7. 【Go】Go语言中的数组与切片

    2024-03-24 04:50:01       18 阅读
  8. QT5.14.2深入剖析Qt反射机制的实现原理

    2024-03-24 04:50:01       19 阅读
  9. 技术创新与产业升级

    2024-03-24 04:50:01       22 阅读
  10. MATLAB:是一款功能强大的商业数学软件

    2024-03-24 04:50:01       20 阅读