cmake — кросс-компиляция кода на C для Android и Windows (в Windows)

#android #c #windows #cmake

Вопрос:

Я хотел бы создать проект cmake, который может генерировать решение MSVS 2019, которое либо создается для Windows, либо для Android.

Я создал каталог под названием myCmakeProject.

Я создал CMakeLists.txt файл и поместил его в каталог myCmakeProject.

Я также создал тестовый файл cpp main.cpp и поместил это в каталог myCmakeProject.

В CMakeLists.txt файл содержит следующее:

 cmake_minimum_required(VERSION 3.10.2)

project(projectname)

add_library(libname STATIC main.cpp)
 

Я создал подкаталог под названием «сборка» в каталоге myCmakeProject.

В каталоге «сборка» я создал файл buildproject.bat, содержащий следующее:

 cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-16 -DANDROID_NDK=C:Users{user}AppDataLocalAndroidSdkndk22.1.7171670 -DCMAKE_TOOLCHAIN_FILE=C:Users{username}AppDataLocalAndroidSdkndk22.1.7171670buildcmakeandroid.toolchain.cmake ..
 

Когда я запускаю buildproject.bat, он генерирует решение MSVS 2019, и оно почти выглядит правильным, но если
Я не ошибаюсь, решение MSVS создает статическую библиотеку для архитектуры x86/x64. Мне нужно, чтобы
он создавался либо для arm64-v8a, либо для armeabi-v7a при сборке для Android и для x86/x64 при сборке для Windows.

Как мне изменить свой проект cmake, чтобы проект cmake либо создавал:

  1. решение MSVS 2019, которое создает код C для Windows (x86 или x64)

или

  1. решение MSVS 2019, которое создает код C для Android (32-разрядный arm или 64-разрядный arm)

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

1. Если вы вызвали cmake один раз, вы не сможете изменить набор инструментов, не удалив все сгенерированные файлы проекта и кэши. Вам нужны два отдельных build каталога, по одному для каждого типа.

2. @Someprogrammerdude Да, я в курсе этого. Должна быть возможность передать параметр в файл .bat, чтобы он либо создавал решение MSVS 2019 для Android, либо решение MSVS 2019 для Windows….правильно?

3. Нет, не совсем. Если вы перейдете с native на cross, вы должны удалить все , что было создано ранее cmake . Поэтому проще иметь два реальных и отдельных каталога сборки, один для native и один для cross.

4. @Someprogrammerdude В этом случае я хотел бы знать, как должен выглядеть файл bat для сборки Android и как должен выглядеть другой файл bat для сборки Windows.

5. AFAICT для Android именно так, как вы нам его показываете, и для Windows без -D аргументов.