Почему OBJECT_DEPENDS приводит к циклической ошибке с генератором ниндзя? - PullRequest
1 голос
/ 02 мая 2019

Мне нужно сделать хак в моем проекте CMake. При таком взломе один из исходных файлов должен быть скомпилирован перед любыми другими файлами. Работает с генератором Makefile. Но с генератором ниндзя я получаю ошибку ninja: error: dependency cycle:. Я пытался найти любую информацию, как это исправить, но безуспешно.

Упрощенный CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)

set(CMAKE_VERBOSE_MAKEFILE ON)

project(pchtest CXX)
set(CMAKE_VERBOSE_MAKEFILE ON)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

add_executable(${PROJECT_NAME} "main.cpp" "pch.cpp" "pch.h" "pch_dummy.cpp")

set_source_files_properties(pch.cpp PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/pchtest.dir/pch_dummy.cpp.o)

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/pch.h.gch
    COMMAND mv ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/pchtest.dir/pch.cpp.o ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/pch.h.gch
    COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/pchtest.dir/pch_dummy.cpp.o ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/pchtest.dir/pch.cpp.o
    COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/pch.h.gch

    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/pchtest.dir/pch.cpp.o
    COMMENT "Copy PCH"
)

set_source_files_properties(main.cpp PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/pch.h.gch)

Ошибка:

ninja: error: dependency cycle: CMakeFiles/pch.h.gch -> CMakeFiles/pchtest.dir/pch.cpp.o -> CMakeFiles/pchtest.dir/pch_dummy.cpp.o -> cmake_object_order_depends_target_pchtest -> CMakeFiles/pch.h.gch

Так как это исправить?

...