У меня есть CMakeLists.txt
как этот:
cmake_minimum_required (VERSION 3.10.0)
project (sqlsession)
# Creates C resources file from files in given directory
function(create_resources dir output)
# Create UUID header guard define
set(UUID_QUERY_NAMESPACE 6ba7b810-9dad-11d1-80b4-00c04fd430c8)
string(
UUID QUERY_UUID
NAMESPACE ${UUID_QUERY_NAMESPACE}
NAME "sqlite-query"
TYPE MD5
)
string (REPLACE "-" "_" QUERY_UUID ${QUERY_UUID})
# Create empty output file
file(WRITE ${output} "")
# Write headers guard start
file(APPEND ${output} "#ifndef QUERY_${QUERY_UUID}\n#define QUERY_${QUERY_UUID}\n\n")
# Collect input files
file(GLOB bins ${dir}/*)
# Iterate through input files
foreach(bin ${bins})
# Get short filename
string(REGEX MATCH "([^/]+)$" filename ${bin})
# Replace filename spaces & extension separator for C compatibility
string(REGEX REPLACE "\\.| |-" "_" filename ${filename})
# Read hex data from file
file(READ ${bin} filedata HEX)
# Convert hex data for C compatibility
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," filedata ${filedata})
# Append data to output file
file(APPEND ${output} "const char ${filename}[] = {${filedata}0x00};\nconst unsigned ${filename}_size = sizeof(${filename});\n")
endforeach()
file(APPEND ${output} "#endif // !QUERY_${QUERY_UUID}\n")
endfunction()
# Create Queries.hpp file that embeds all files that are contained into
# a Queries folder.
create_resources( ${CMAKE_SOURCE_DIR}/resources/${PROJECT_NAME}/Queries ${CMAKE_BINARY_DIR}/${PROJECT_NAME}/Queries/Queries.hpp)
set (CMAKE_INCLUDE_CURRENT_DIR ON)
include_directories (${CMAKE_BINARY_DIR}/${PROJECT_NAME}/Queries/)
set (PROJECT_SRC
Session.cpp
)
add_library (${PROJECT_NAME} SHARED ${PROJECT_SRC})
Есть функция create_resources
, которую я взял из этого поста : она принимает в качестве аргумента aпапка, в которой находятся файлы и имя файла заголовка C, в который встроены файлы.Это решение, которое мне нравится, для встраивания файлов кросс-платформенным способом и без использования других систем (я знаю ресурсы Qt, но Qt не используются в этом проекте).
В этом случае я встраиваю файлы, которыенаходятся внутри папки Queries
, набора файлов .sql.
Проблема в том, что когда я добавляю, удаляю или обновляю файл .sql, мне нужно повторно запустить CMake вручную, иначе файл заголовкане обновляется (обычно я прикасаюсь к файлу CMakeLists.txt и перезапускаю сборку).
Есть ли способ автоматического запуска CMake при внесении изменений в папку Queries
?Поэтому мне не нужно запускать его каждый раз, когда я что-то меняю в запросах (в основном, когда я играю с Git checkout).