CMake: игнорируйте шаг настройки, если файлы не изменились

#c #cmake

Вопрос:

Это широко документировано о том, как создавать llvm и clang, чтобы использовать их в качестве автономных инструментов в Windows, и я создаю сценарий для запуска этого в CI. Сценарий bat вызывает cmake для шага настройки, но выполнение шага настройки занимает более 5 минут, а сборка занимает еще ~40 минут.

в Linux при выполнении шага настройки cmake он выполняется довольно быстро и больше не создает артефактов, что улучшает время компиляции.

Мой шаг настройки выглядит следующим образом:

 
cmake -G"Visual Studio 16 2019" ^
        -DBUILD_SHARED_LIBS=Off ^
        -DLLVM_INCLUDE_TESTS=Off ^
        -DLLVM_ENABLE_DIA_SDK=1 ^
        -DLLVM_TARGETS_TO_BUILD="X86" ^
        -DCMAKE_BUILD_TYPE=Release ^
        -DLLVM_ENABLE_LIBCXX=OFF ^
        -DLLVM_BUILD_LLVM_C_DYLIB=ON ^
        -DLLVM_POLLY_LINK_INTO_TOOLS=ON ^
        -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON ^
        -DLLVM_LINK_LLVM_DYLIB=ON ^
        -DLLVM_ENABLE_EH=ON ^
        -DLLVM_ENABLE_FFI=OFF ^
        -DLLVM_ENABLE_RTTI=ON ^
        -DLLVM_INCLUDE_DOCS=OFF ^
        -DLLVM_INCLUDE_TESTS=OFF ^
        -DLLVM_INSTALL_UTILS=ON ^
        -DLLVM_ENABLE_Z3_SOLVER=OFF ^
        -DLLVM_OPTIMIZED_TABLEGEN=ON ^
        -DLLVM_TARGETS_TO_BUILD=all ^
        -DLLDB_USE_SYSTEM_DEBUGSERVER=ON ^
        -DLLDB_ENABLE_PYTHON=OFF ^
        -DLLDB_ENABLE_LUA=OFF ^
        -DLLDB_ENABLE_LZMA=ON ^
        -DLLDB_INCLUDE_TESTS=OFF ^
        -DLIBOMP_INSTALL_ALIASES=OFF ^
        -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;mlir;polly" ^
        -DLLVM_ENABLE_RUNTIMES="compiler-rt" ^
        -DCMAKE_INSTALL_PREFIX=%INSTALL_FOLDER%llvm ^
        -Thost=x64 ^
        -B %BUILD_FOLDER%llvm ^
        -S %SOURCE_FOLDER%llvm-project-llvmorg-12.0.1llvm
 

есть ли что-нибудь, что я могу передать в cmake, чтобы проверить, произошла ли конфигурация уже до ее перенастройки? a-только-если-не-настроено или что-то в этом роде.

Комментарии:

1. Насколько мне известно, нет. Обычно, когда в этой ситуации я сам обхожу cmake, вместо этого просто вызываю систему сборки напрямую (например, ninja, make). Так что, может быть, вы можете просто добавить флаг в свой сценарий для этого?

2. это позволит игнорировать незначительные изменения в конфигурации cmake. если мне нужно коснуться параметров, которые следует перенастроить, потому что значения изменились. если я добавлю свой собственный тест (например, проверю, существует ли папка), это не сработает.

3. Я понимаю. Надеюсь, у кого-нибудь найдется хороший ответ.

4. Просто создайте проект. Если какой-либо файл, влияющий на конфигурацию, был изменен, CMake автоматически перенастраивает проект перед его созданием. (Есть некоторые изменения, которые могут повлиять на конфигурацию незаметным образом: замена исполняемого файла компилятора, добавление или удаление библиотеки в системе и т.д. В этом случае вам необходимо повторить настройку вручную.)

5. Вы LLVM_TARGETS_TO_BUILD ставили дважды. Сначала просто X86, а во второй раз «все», которое выигрывает. Вам действительно следует отсортировать свой список -D флагов, чтобы избежать таких ошибок.