Какую точную гарантию порядка дает CMake add_dependenties?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Какую точную гарантию порядка дает CMake add_dependenties?

Сообщение Anonymous »

Для создания нашего проекта мы используем CMake и ninja. Мы хотели повторно создавать файл cpp при каждой сборке, содержащий метку времени сборки, чтобы наш исполняемый файл мог регистрировать его. У нас получилось следующее:

Код: Выделить всё

####################
# Embed build time #
####################

find_package(Python3 REQUIRED COMPONENTS Interpreter)

set(TIMESTAMP_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated_timestamp)
set(TIMESTAMP_CPP ${TIMESTAMP_DIR}/timestamp.cpp)
set(TIMESTAMP_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/generate_timestamp.py)

file(MAKE_DIRECTORY ${TIMESTAMP_DIR})

add_custom_target(generate_timestamp_files
COMMAND ${Python3_EXECUTABLE} ${TIMESTAMP_SCRIPT} ${TIMESTAMP_CPP}
DEPENDS ${TIMESTAMP_SCRIPT}
COMMENT "Generating timestamp source and header"
)

set_source_files_properties(
${TIMESTAMP_CPP}
PROPERTIES
GENERATED TRUE
)

add_library(timestamp_lib
${TIMESTAMP_CPP}
)

add_dependencies(timestamp_lib generate_timestamp_files) # HERE

target_include_directories(timestamp_lib
PUBLIC
include
)

target_link_libraries(main_target
timestamp_lib
)
Обратите внимание на вызов add_dependents. Теперь эта конфигурация работает, файл cpp обновляется при каждой сборке, но библиотека перекомпилируется только каждые две сборки. Почему? Насколько я понимаю, add_dependentities должен заставить ниндзя ждать проверки библиотеки до тех пор, пока файл не будет регенерирован, после чего временная метка должна быть новее, чем библиотека. Судя по всему, они работают параллельно? В руководстве CMake упоминается:

Код: Выделить всё

add_dependencies( ...)
[...]
Изменение в версии 3.9: генераторы Ninja используют более слабый порядок, чем другие генераторы, чтобы улучшить доступный параллелизм. Они только гарантируют, что пользовательские команды зависимостей будут завершены до начала компиляции исходных текстов; это гарантирует доступность сгенерированных источников.

Но разве этого недостаточно? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/798 ... cies-gives
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»