c++ - 在包含语句中为标题名称添加前缀的库名称
问题描述
我有一个包含嵌套库的 CMake 项目。“嵌套”是指它存在于这个项目源代码树中(在libraries
文件夹中)。这是这个库的文件结构:
$ tree ./libraries/SomeLibrary
├── CMakeLists.txt
├── include
│ └── some.h
└── src
├── some.cpp
└── things.h
在那个库中,CMakeLists.txt
我有以下包含路径、公共头文件和安装的语句:
set(target "SomeLibrary")
# ...
target_include_directories(${target}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set(public_headers
include/some.h
)
set_target_properties(${target} PROPERTIES PUBLIC_HEADER "${public_headers}")
# ...
install(TARGETS ${target}
EXPORT "${target}Config"
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # lib
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} # lib
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # bin
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} # include
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${target} # include/SomeLibrary
)
install(
EXPORT "${target}Config"
FILE "${target}Config.cmake"
NAMESPACE some::
DESTINATION cmake
)
现在,如果我从某个外部项目链接到这个库,那么我会包含这个库的标题,如下所示:
#include <SomeLibrary/some.h>
这很棒,正是我所期望的。但是,如果我target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE SomeLibrary)
从我的基础项目(这个库所在的源树中)链接到这个库(),那么我需要包含这个库的标题,如下所示:
#include <some.h>
我可以以某种方式做到这一点,以便我也可以#include <SomeLibrary/some.h>
用于这种“内部”链接吗?我想要它的原因是因为我相信它会帮助我避免可能的标题名称冲突(如果项目中的其他一些库也有一个名为的公共标题some.h
)。
一种简单的解决方案是在其中创建SomeLibrary
文件夹include
并将公共标头放在那里。但我对这个选项并不完全满意,因为SomeLibrary/include/SomeLibrary
看起来并不好。
现在可能有其他方式吗?
解决方案
推荐阅读
- laravel - Aimeos电子商务平台使用API在前端使用Vue.js
- c# - TokenCreationRequest 不包含资源的定义
- http - 使用带有 curl 库的 http 协议在云中发送数据
- angular - 在 index.html 上添加清单 Json
- java - @PropertySource 无法自动装配所需的类(Spring Boot 2.3.8.RELEASE)
- powerbi-embedded - Microsoft Report Builder - 使用代码获取数据源连接字符串
- r - 是否有与 Python 的 split() 等效的 R 函数?
- node.js - 如何将日期格式从对象的猫鼬数组更改为 ejs 视图上的字符串?
- wso2 - 在 WSO2 的开发门户中更新默认 Curl 命令
- cmd - 通过命令行打印给定数量的word文件副本