cmake find_package CMakeLists.txt 子文件夹中的相对路径
cmake find_package relative path in CMakeLists.txt subfolder
我有以下文件结构,并希望使用cmake配置文件MYLIBConfig.cmake
,项目中所有CMakeLists.txt
文件都使用该配置文件来包含位于顶层include
文件夹中的标头。
MYLIBConfig.cmake
include/
header_a.h
header_b.h
src/
project_a/
CMakeLists.txt
main.cpp
project_b/
CMakeLists.txt
main.cpp
CMakeLists.txt
包含以下内容:
cmake_minimum_required(VERSION 3.14)
find_package(MYLIB REQUIRED PATHS ${CMAKE_CURRENT_SOURCE_DIR}/../../)
project(projecta)
set(CMAKE_CXX_STANDARD 17)
add_executable(projecta main.cpp)
message(${MYLIB_INCLUDE_DIRS}) # Outpus /include/ which is the problem. Should be a relative path to the include folder
target_include_directories(${PROJECT_NAME}
PRIVATE
${MYLIB_INCLUDE_DIRS}
)
MYLIBConfig.cmake目前有以下内容:
cmake_minimum_required(VERSION 3.14)
#message(${PREFIX})
set(MYLIB_INCLUDE_DIRS ${CMAKE_PREFIX_PATH}/include/)
通过此设置,我无法使用#include "header_a.h"
将标头包含在我的主文件中.cpp因为它们找不到。
问题是我不知道我对find_package
的使用是否正确,因为当我在CMakeLists.txt
中使用message(message(${MYLIB_INCLUDE_DIRS})
时,设置变量MYLIB_INCLUDE_DIRS
只是/include/
。是否有我可以在MYLIBConfig.cmake
文件中使用的 cmake 变量来设置相对于"当前活动"CMakeLists.txt
的路径?或者有没有另一种方法可以使用配置文件实现工作包括?我知道我可以在每个CMakeLists.txt
的target_include_directories
内使用相对路径,但我想使用配置文件来灵活地更改包含文件夹并可能设置更多变量。在配置文件中,我还尝试使用 ${CMAKE_PREFIX_PATH} 和 ${CMAKE_CURRENT_SOURCE_DIR},但这些变量也不起作用。
编辑
我认为它可以起作用的另一种方式是当MYLIB_INCLUDE_DIRS
将导致全球路径时。这是合适的方式吗?怎么能做到这一点呢?
您可以使用CMAKE_CURRENT_LIST_DIR获取MYLIBConfig.cmake
全局路径:
set(MYLIB_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/include/)
或者,如果您想要当前处理的源的相对路径,您可以使用 file 相应地获取它:
file(RELATIVE_PATH MYLIB_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_LIST_DIR}/include/)
- 如何将更多文件夹添加到c++include路径
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何在文档文件夹中创建目录
- "assimp/config.h"找不到,但它在文件夹中
- C++入门 5 版:类消息和文件夹
- 我可以在 Arduino 的库文件夹之外安装库吗?
- 如何按文件扩展名引用文件夹中的文件
- 在QTreeView中仅显示共享驱动器和文件夹
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 介子复制/安装头文件到输出目录并保持文件夹结构
- vcruntime.h 从 Windows 包含文件夹中丢失?
- 在文件夹迭代上实现 RAII
- 使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++
- 使文件夹中的所有文件可供所有项目(子目录)访问
- 无法使用 CMake 从其他文件夹添加源文件
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- cmake find_package CMakeLists.txt 子文件夹中的相对路径
- Boost Filesystem flowly_caronical不会在没有父文件夹的情况下解决相对路径