передача ‘g ++ -MM’ ‘.d’ необходимого содержимого файла как ЗАВИСИМОГО в CMake ‘add_custom_command’

В 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()

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]