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