CMake не работает с пробелами при вызове из Gradle - PullRequest
0 голосов
/ 08 марта 2019

Я создаю свои Android APK из командной строки в Windows, используя Gradle. Все работает нормально, кроме случаев, когда в имени пути есть пробел. В этом случае Gradle, похоже, неправильно передает путь к CMake, как видно из вывода консоли.

В моем build.gradle CMake называется так:

externalNativeBuild {
    cmake {
        path "src/main/cpp/CMakeLists.txt"
    }
}

Теперь, когда я компилирую свой проект из C:\test\apktest, все в порядке. Когда я компилирую его из C:\test\apk test (обратите внимание на символ пробела!), Он больше не работает. Вывод консоли такой:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:externalNativeBuildArm7Debug'.
> Build command failed.
  Error while executing process C:\Users\andreas\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\cmake.exe with arguments {--build C:\test\apk test\app\.externalNativeBuild\cmake\arm7Debug\armeabi-v7a --target myproject}
  Unknown argument test\app\.externalNativeBuild\cmake\arm7Debug\armeabi-v7a
  Usage: cmake --build <dir> [options] [-- [native-options]]
  Options:
    <dir>          = Project binary directory to be built.
    --target <tgt> = Build <tgt> instead of default targets.
                     May only be specified once.
    --config <cfg> = For multi-configuration tools, choose <cfg>.
    --clean-first  = Build target 'clean' first, then build.
                     (To clean only, use --target 'clean'.)
    --use-stderr   = Ignored.  Behavior is default in CMake >= 3.0.
    --             = Pass remaining options to the native tool.

Как видите, CMake неправильно запускается из Gradle, потому что он запускается так: cmake --build C:\test\apk test\app\.externalNativeBuild\cmake\arm7Debug\armeabi-v7a --target myproject, но вокруг аргумента --build должны быть двойные кавычки, чтобы он анализировался как один аргумент, а не как два отдельных аргументы.

Я думаю, что это ошибка, но где об этом следует сообщать? Android NDK? Gradle? CMake?

Кроме того, есть ли обходной путь, кроме использования путей с пробелами?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...