2015-06-24 122 views
3

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

(作为一个方面说明,如果你能看到一个不相关的办法可以改善此代码的任何,那还可以理解的。)

回答

4

有用于CMake的模块约定:蛇情况function_or_macro()在实施CamelCase FunctionOrMacro.cmake文件。所以如果有疑问,请使用CamelCase。

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

+0

是的,我见过以前使用的惯例。但是,在这种特殊情况下,相关脚本实际上并不包含函数或宏;相反,它本质上是“充当”一个函数,意在在构建时调用,而不是在“CMake时间”。相同的命名惯例是否仍然适用? –

+2

@RedRoboHood:CMake提供的所有cmake和shell脚本遵循这个约定(不仅是宏或函数)。但是因为对于脚本我不认为它和函数/宏的defs一样强壮,我会说,如果你需要一个约定,使用这个,因为没有别的。但随意为您的脚本命名,无论您想要什么。这就是为什么我的意思是“当有疑问时”。 –

相关问题