2015-06-24 58 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一樣強壯,我會說,如果你需要一個約定,使用這個,因爲沒有別的。但隨意爲您的腳本命名,無論您想要什麼。這就是爲什麼我的意思是「當有疑問時」。 –

相關問題