cmake中的${CMAKE_CURRENT_BINARY_DIR}

在 CMake 中,${CMAKE_CURRENT_BINARY_DIR} 变量代表当前 CMakeLists.txt 文件的二进制目录。它是在 CMake 处理子目录时动态更新的,因此在子目录中使用 ${CMAKE_CURRENT_BINARY_DIR} 时,指的是该子目录对应的二进制目录,而不是根目录的二进制目录。

具体解释

  1. 二进制目录

    • CMake 生成的文件(如 Makefile 或 Visual Studio 项目文件)以及编译后的输出文件(如目标文件、可执行文件等)都存储在这个目录中。
    • 通常情况下,构建目录是从源目录分开的,通常在一个名为 build 的子目录中。
  2. 在子目录中的使用

    • 当你在根目录的 CMakeLists.txt 中调用 add_subdirectory(subdir) 时,CMake 会进入 subdir 目录并处理 subdir/CMakeLists.txt 文件。在这个子目录中,${CMAKE_CURRENT_BINARY_DIR} 将指向 subdir 目录对应的二进制输出路径。

例子

假设你的项目结构如下:

my_project/
├── CMakeLists.txt      # 根 CMakeLists.txt
├── subdir/
│   └── CMakeLists.txt  # 子目录中的 CMakeLists.txt
└── build/              # 构建目录
  • 如果在根目录的 CMakeLists.txt 中添加了:
    add_subdirectory(subdir)
    
  • 然后在 subdir/CMakeLists.txt 中使用 ${CMAKE_CURRENT_BINARY_DIR},它将指向 build/subdir,而不是 build

总结

${CMAKE_CURRENT_BINARY_DIR} 在子目录中的值代表了该子目录对应的二进制输出目录。它是相对当前处理的 CMakeLists.txt 文件的上下文变化而变化的,有助于组织和管理构建输出。

cmake_minimum_required(VERSION 3.16) # 声明该项目的名称和版本号 project(MyLib VERSION 1.0) # 添加库代码文件到该库 add_library(mylib STATIC src/header.cpp) target_include_directories(mylib INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include> ) add_library(mylib_shared SHARED src/header.cpp) target_include_directories(mylib_shared INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:include> ) # include_directories(include) # 指定install路径,以便于其他项目找到该库 install(TARGETS mylib mylib_shared EXPORT MyLibTargets ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) install(FILES include/header.h DESTINATION include) # 生成MyLibConfig.cmake文件 include(CMakePackageConfigHelpers) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" VERSION ${MyLib_VERSION} COMPATIBILITY AnyNewerVersion ) configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/MyLibConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" INSTALL_DESTINATION cmake ) install( EXPORT MyLibTargets NAMESPACE MyLib:: DESTINATION cmake ) # export(EXPORT MyLibTargets # NAMESPACE MyLib:: # FILE MyLibTargets.cmake) # install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MyLibTargets.cmake DESTINATION cmake) install( FILES "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/MyLibConfigVersion.cmake" DESTINATION cmake )为什么执行时,提醒/home/czl/cmake_lib/src/header.cpp:1:10: fatal error: header.h: 没有那个文件或目录
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值