CMake中PROJECT_SOURCE_DIR与PROJECT_BINARY_DIR的区别

PROJECT_SOURCE_DIR与PROJECT_BINARY_DIR并不像一些网站上说的是一样的,两者并不相同。首先看一下官方对两者的定义:

PROJECT_SOURCE_DIR
Top level source directory for the current project.
This is the source directory of the most recent project() command.


PROJECT_BINARY_DIR
Full path to build directory for project.
This is the binary directory of the most recent project() command.

这个解释不是很好懂,结合一个例子说明下。比如一个工程目录结构如下:

project
|   CMakeLists.txt
|   source1.cxx

CMakeLists.txt内容如下:

cmake_minimum_required (VERSION 3.0)
project (myProject)
get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
add_executable (t1 source1.cxx)

如果在CMakeLists.txt所在的目录运行cmake . 的话,可以看到两个变量的值分别为:

PROJECT_SOURCE_DIR=C:/Codebase/Learnings/camkelearn3
PROJECT_BINARY_DIR=C:/Codebase/Learnings/camkelearn3

就是当前的目录。 实际上一般成熟的工程不会把source文件与cmake生成的文件放在一起,而是会放到不同的目录中。比如下面的目录结构:

project
|____sources
|   |   source1.cxx
|   |   CMakeLists.txt
____build

在build目录中运行cmake ../sources/,可以看到两个变量的值分别为:

-- PROJECT_BINARY_DIR=C:/Codebase/Learnings/camkelearn3/build
-- PROJECT_SOURCE_DIR=C:/Codebase/Learnings/camkelearn3/sources
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、付费专栏及课程。

余额充值