В GNU Make мы можем -include/sinclude
.d
(динамически генерируемые предварительные требования) файл, созданный из g++ .... -MM/MF files
динамически создавать зависимости.
Есть ли способ сделать это в CMake?
Я пытался прочитать содержимое файла в переменную, проанализировать его, а затем передать его ЗАВИСИТ опция, как показано ниже, но генерируется libraryname.dir/build.make
неправильно раскрывает значение переменной. Он помещает их всех в одну строку с пробелами и вызывает проблему. Но сообщение напечатано правильно.
Конечно, я ожидаю второй раз перестроить когда .d
существует.
foreach(source IN LISTS allSources)
get_filename_component(source_name ${source} NAME_WE)
set(source_name_part ${source_name}_${decoder_type})
set(last_prerequisites "")
if(EXISTS "${objDir}/${source_name}.d")
file(READ "${objDir}/${source_name}.d" last_prerequisites)
string(REPLACE "\\" "" last_prerequisites "${last_prerequisites}")
string(REPLACE "\n" "" last_prerequisites "${last_prerequisites}")
string(REGEX REPLACE ".*.o:\ " "" last_prerequisites "${last_prerequisites}")
string(REGEX REPLACE "\\$" "" last_prerequisites "${last_prerequisites}")
string(REGEX REPLACE " " ";" last_prerequisites "${last_prerequisites}")
message(STATUS "_______________________________________\n")
message(STATUS "__last_prerequisites:${last_prerequisites}:_________\n")
message(STATUS "_______________________________________\n")
endif()
add_custom_command(
OUTPUT ${objDir}/${source_name}.o
COMMAND ${compile_command} -c ${source} -o ${objDir}/${source_name}.o
COMMAND ${compile_command_d} ${source} > ${objDir}/${source_name}.d
DEPENDS ${all_build_make_files} ${last_prerequisites} ${source}
COMMENT "Building ${objDir}/${source_name}.o"VERBATIM )
add_custom_target(${source_name_part} ALL
DEPENDS ${objDir}/${source_name}.o
COMMENT "Compiling source ${source} "VERBATIM )
endforeach()
Задача ещё не решена.
Других решений пока нет …