相关疑难解决方法(0)

CMake 命名空间实际上有什么意义吗?

在现代 CMake 中,习惯上在命名空间内导出目标,例如导出foo项目foo::foo,也许还有foo::bar其他。

我的问题是:这些命名空间本身是否真的意味着什么,或者它们只是单个名称的一部分,而没有 CMake 分隔分隔的::名称组件?

如果前者是正确的,你能说“命名空间中的所有目标”之类的东西吗?或者以其他方式使用命名空间?

namespaces cmake semantics

13
推荐指数
1
解决办法
4733
查看次数

cmake别名的用处

我不完全得到别名表达式的应用程序.我明白我可以写这样的东西

cmake_minimum_required(VERSION 3.5.1 FATAL_ERROR)
project(myLibs)
add_library(${PROJECT_NAME} src/test.cpp)
add_library(myLibs::myLibs ALIAS ${PROJECT_NAME})
...
Run Code Online (Sandbox Code Playgroud)

然后使用

  target_link_libraries(${TARGET_NAME}
  myLibs::myLibs
Run Code Online (Sandbox Code Playgroud)

在另一个文件中将库链接到某些可执行文件等.

但为什么我会这样做?我不妨跳过别名定义,直接使用构建库的targetname

target_link_libraries(${TARGET_NAME}
myLibs
Run Code Online (Sandbox Code Playgroud)
  • 任何人都可以向我解释为什么存在别名
  • 为什么他们使用::语法?别名不是完全随意的吗?

alias cmake

9
推荐指数
2
解决办法
1394
查看次数

CMake 脚本的命名约定是什么?

我知道 CMake 使用标准名称“CMakeLists.txt”和add_subdirectory在构建过程中直接调用脚本的函数。

我有一些 CMake 代码,可用于将文件转换为 C++ 字符串,然后可以使用#include指令将其烘焙到程序中。我的根 CMakeLists 文件中的相关代码如下所示(当然大大简化了):

add_custom_command(
  OUTPUT ${CMAKE_BINARY_DIR}/path/to/example.json.txt
  COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${STRING_PATH} -P BuildString.cmake
  DEPENDS ${CMAKE_SOURCE_DIR}/path/to/example.json
  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
add_custom_target(strings DEPENDS ${CMAKE_BINARY_DIR}/path/to/example.json.txt)
Run Code Online (Sandbox Code Playgroud)

(在实际代码中,我调用add_custom_command每个需要转换为字符串的文件,然后将所有输出文件名作为列表传递给add_custom_target.)

这是 BuildString.cmake:

set(DELIMITER "")

set(SOURCE ${CMAKE_ARGV1})
set(BUILD ${CMAKE_ARGV2})
set(PATH ${CMAKE_ARGV3})

file(READ ${SOURCE}/${PATH} STRING)
# add semicolons back into string
string(REGEX REPLACE ";" "\\\\;" STRING "${STRING}")
file(WRITE ${BUILD}/${PATH}.txt R\"${DELIMITER}\(${STRING}\)${DELIMITER}\")
Run Code Online (Sandbox Code Playgroud)

如您所见,BuildString.cmake 只需要一个输入文件并将该文件的内容(使用 C++ 原始字符串文字表示法${DELIMITER}作为分隔符包装)输出到构建目录中。

我应该怎么称呼 BuildString.cmake?使用所有带下划线的小写字母 (build_string.cmake) 还是小写字母 (buildString.cmake) 的约定?或者名称应该是名词而不是动词(StringBuilder.cmake)?

(作为旁注,如果您能看到一种无关的方式,我可以改进此代码中的任何一个,那也将不胜感激。)

convention filenames conventions naming-conventions cmake

3
推荐指数
1
解决办法
3214
查看次数