【问题标题】:What is the naming convention for CMake scripts?CMake 脚本的命名约定是什么?
【发布时间】:2015-09-11 02:17:59
【问题描述】:

我知道 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)

(在实际代码中,我为每个需要转换为字符串的文件调用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}\")

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

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

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

【问题讨论】:

    标签: cmake naming-conventions filenames conventions convention


    【解决方案1】:

    CMake 模块有一个约定:snake-case function_or_macro() 在 CamelCase FunctionOrMacro.cmake 文件中实现。因此,如有疑问,请使用 CamelCase。

    并使用动词,名词用于类。

    【讨论】:

    • 是的,我以前见过这种约定。但是,在这种特殊情况下,有问题的脚本实际上并不包含函数或宏。相反,它本质上“充当”一个旨在在构建时而不是在“CMake 时”调用的函数。相同的命名约定是否仍然适用?
    • @RedRoboHood:CMake 附带的所有 cmake 和 shell 脚本都遵循这个约定(不仅是宏或函数)。但是因为对于脚本,我认为它不像函数/宏定义那样强大,所以我想说,如果你需要一个约定,请使用这个,因为没有其他的。但是,您可以随意命名您的脚本。这就是我所说的“有疑问时”的原因。
    猜你喜欢
    • 2011-08-20
    • 2012-11-09
    • 2011-10-06
    • 2022-06-28
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多