c++ - CMakeLists.txt 中的命名空间符号?
问题描述
我刚刚克隆了libigl 存储 库,我的目标是破解其中一个示例。我首先将其中一个教程移动到不同的文件夹中。然而,每个 CMakeLists.txt 如下所示:
get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(${PROJECT_NAME})
add_executable(${PROJECT_NAME}_bin main.cpp)
target_link_libraries(${PROJECT_NAME}_bin igl::core igl::opengl igl::opengl_glfw tutorials)
我不是 CMake 方面的专家,但我从未见过类似的语法igl::core igl::opengl igl::opengl_glfw
,
谁能告诉我这是什么意思?它像 C++ 中的命名空间吗?顶层 CMake是一个名为的项目,libigl
因此它必须以某种方式相关。
解决方案
从文档:
双冒号的使用是用于命名 IMPORTED 目标和 ALIAS 目标的常见模式。在计算目标的链接依赖项时,每个依赖项的名称可以是目标,也可以是磁盘上的文件。以前,如果找不到具有匹配名称的目标,则该名称被认为是指磁盘上的文件。如果应该是目标名称有错字,这可能会导致令人困惑的错误消息。
此外,从这里:
导出安装目标时指定带有双冒号的NAMESPACE 。这种双冒号的约定给 CMake 一个提示,即当下游使用 target_link_libraries() 命令使用该名称时,该名称是一个 IMPORTED 目标。这样,如果尚未找到提供它的包,CMake 可以发出诊断。
因此,命名空间可以在以下 CMake 代码段中使用:
export(EXPORT ClimbingStatsTargets
FILE "${CMAKE_CURRENT_BINARY_DIR}/ClimbingStats/ClimbingStatsTargets.cmake"
NAMESPACE Upstream::
)
推荐阅读
- pyarrow - 在哪里可以找到使用 Apache Arrow 的 IPC 示例?
- c# - 剃须刀页面上未加载图像
- elasticsearch - 未使用 logstash 模板中的设置创建 Elasticsearch 索引
- javascript - React 如何正确调用函数来响应
- eclipse - Eclipse RSE:连接到 Windows FTP 的巫术是什么?
- node.js - 在具有 MongoDB 聚合的字典数组上使用 $mergeObjects
- ios - 初始 react-native run-ios 时缺少 Podfile.lock
- sql - SQL 查询未按预期过滤结果 - 排除具有特定列值的结果
- javascript - 排除选择菜单表单 onclick onclick 事件
- sql - 在oracle中对没有排序的列进行排名