Обновление : Кажется, появляется дополнительная поддержка, добавляя новое свойство цели для целей интерфейса в CMake 3.13 (INTERFACE_LINK_DEPENDS
и обновленный документ для LINK_DEPENDS
, в котором упоминается Ninja как поддерживаемый генератор (хотя, не уверен, когда в какой версии CMake эта функция была реализована).
Примечание. Не полный ответ, нопросто документирование моего использования с ниндзя в качестве генератора
Использование LINK_DEPENDS
не работает с генераторами, отличными от Makefile
, например Ninja .
Мой обычный подходИз всех найденных в этом сообщении списка рассылки необходимо использовать фиктивный файл и изменить его временную метку, используя
add_custom_command(OUTPUT linker-script.ld
[...]
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_SOURCE_DIR}/dummy.c
[...])
Тем не менее, это не очень хорошо работает, так как при первом вызовеобнаруживает, что скрипт компоновщика устарел, и, таким образом, выполняет его копирование и «касается» фиктивного исходного файла. Однако требуется второй вызов, чтобы подобрать модификацию и перестроить все зависимые цели.
Это неудобно, но я полагаю, что оно направлено на классификацию зависимостей Ninja (неявная, явная, только для порядка).С помощью команды add_dependencies
создается только зависимость Ninja только для порядка, поскольку сценарий компоновщика не влияет в терминах CMake на строку сборки двоичной цели, с которой вы хотите его запустить.
Что касается интерфейс библиотека, я не вижу, как это могло бы помочь в этой ситуации, поскольку она даже не создает вывод сборки;в основном он действует как организационный заполнитель.