ошибка conan: мне нужно скрестить пакеты сборки для os: iOS с моими Macos, но когда первый пакет был готов, он сломал мой cpt во время тестирования

Я хочу использовать cpt для кросс-сборки нескольких пакетов iOS с аркой «armv7», «armv8», «x86_64» и build_type «Debug», «Release». Но когда тестировался первый пакет, он сломал мою сборку с этим "/ bin / sh: bin / test_package: Bad CPU type in executable". Я знаю, что не могу запустить armv7 на моей хост-архитектуре x86_64, но я не хочу, чтобы мой план сборки провалился. Как я могу продолжить сборку без тестирования пакета или успешного тестирования моего пакета.

Я проверил свои CMakeLists.txt и conanfile.py в моем каталоге test_package, но я не знал, как исправить эту проблему.

Вот часть conanfile.py в test_package

def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def test(self):
        with tools.environment_append(RunEnvironment(self).vars):
            bin_path = os.path.join("bin", "test_package")
            self.run(bin_path, run_environment=True)

Вот мой CMakeLists.txt в test_package

project(test_package)
cmake_minimum_required(VERSION 2.8.11)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

add_executable(${PROJECT_NAME} test_package.cpp)
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})

Вот часть моего build.py

builder = ConanMultiPackager()

    #  add builder settings with the arch and type of build
    def add_builder_settings(arch, build_type):
        requires = {"*": ["darwin-toolchain/1.0.4@theodelrieu/testing"]}
        options = {"darwin-toolchain:bitcode": False}
        builder.add(settings={"os": "iOS", "arch": arch, "build_type": build_type, "os.version": "10.0", "compiler": "apple-clang"},
                    build_requires=requires, options=options)

    # add build settings for iOS
    add_builder_settings("armv7", "Debug")
    add_builder_settings("armv7", "Release")
    add_builder_settings("armv8", "Debug")
    add_builder_settings("armv8", "Release")
    add_builder_settings("x86_64", "Debug")
    add_builder_settings("x86_64", "Release")

Вот мой отчет об ошибке

libx264/20171211@username/stable (test package): Running test()
/bin/sh: bin/test_package: Bad CPU type in executable

Я хочу собрать 6 типов пакетов с помощью одного build.py. Но собрать только один пакет не удалось.


person wangyushan    schedule 16.08.2019    source источник


Ответы (1)


Чтобы избежать выполнения test_package при кросс-билдинге, я настоятельно рекомендую идею Bincrafters:

from conans import ConanFile, CMake, tools
import os


class TestPackageConan(ConanFile):
    settings = "os", "compiler", "build_type", "arch"
    generators = "cmake"

    def build(self):
        cmake = CMake(self)
        cmake.configure()
        cmake.build()

    def test(self):
        if not tools.cross_building(self.settings):
            bin_path = os.path.join("bin", "test_package")
            self.run(bin_path, run_environment=True)

Идея здесь в том, чтобы пропустить выполнение, и Конан обнаруживает эту арку! = Build_arch.

Вы можете посмотреть исходный код здесь:

https://github.com/bincrafters/templates/blob/master/default/test_package/conanfile.py#L15

person uilianries    schedule 16.08.2019
comment
Действительно ценю это. Я не очень хорошо знаком с Конаном, поэтому не знаю этого метода. Это было полезно, и я успешно решил эту проблему. Спасибо. - person wangyushan; 17.08.2019