我知道CMake使用标准名称“CMakeLists.txt”和add_subdirectory
函数直接在构建过程中调用脚本。CMake脚本的命名约定是什么?
我有一些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只需要输入文件并输出文件的内容(裹着C++原始字符串文字nota使用${DELIMITER}
作为分隔符)到构建目录中。
我该怎么称呼BuildString.cmake?约定是否全部使用小写,下划线(build_string.cmake),或者使用较低的驼峰大小(buildString.cmake)?或者该名称应该是名词而不是动词(StringBuilder.cmake)?
(作为一个方面说明,如果你能看到一个不相关的办法可以改善此代码的任何,那还可以理解的。)
是的,我见过以前使用的惯例。但是,在这种特殊情况下,相关脚本实际上并不包含函数或宏;相反,它本质上是“充当”一个函数,意在在构建时调用,而不是在“CMake时间”。相同的命名惯例是否仍然适用? –
@RedRoboHood:CMake提供的所有cmake和shell脚本遵循这个约定(不仅是宏或函数)。但是因为对于脚本我不认为它和函数/宏的defs一样强壮,我会说,如果你需要一个约定,使用这个,因为没有别的。但随意为您的脚本命名,无论您想要什么。这就是为什么我的意思是“当有疑问时”。 –