conan cross build for Android with NDK toolchain

1, Create demo project.

#mkdir conan_demo

#android_29_arm_clang build CMakeLists.txt conanfile.txt main.cpp toolchain-arm.cmake

#cat CMakeLists.txt

复制代码
cmake_minimum_required(VERSION 3.15)
project(CrossCompileExample)

add_definitions("-std=c++11")

#set(CMAKE_REQUIRED_FLAGS -std=c++11)
#set(CMAKE_REQUIRED_FLAGS -static-libstdc++)
#add_definitions("-static-libstdc++")

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
#set(CMAKE_REQUIRED_FLAGS -static-libstdc++)
#set(CMAKE_REQUIRED_FLAGS -std=c++11)

add_executable(conan_demo main.cpp)

# Link dependencies
target_link_libraries(conan_demo ${CONAN_LIBS})

conan version :1.66.0

复制代码
#conanfile.txt
[requires]
fmt/9.0.0
spdlog/1.10.0

[generators]
cmake

conan_demo# cat main.cpp 
#include <iostream>
#include <fmt/core.h>
#include <spdlog/spdlog.h>

using namespace std;

int main() {
	cout<< "Hello, World from the cross-compiled app!" << endl;
	fmt::print("Hello, {}!\n", "Conan");
	fmt::print("Hi, {}!\n", "Aric Wang");
	spdlog::info("Hello, {}!", "spdlog with Conan");
	spdlog::error("This is an error message");

	return 0;
}

conan_demo# cat toolchain-arm.cmake 
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# Set the cross-compilation environment
set(CMAKE_C_COMPILER /opt/ndk/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi29-clang)
set(CMAKE_CXX_COMPILER /opt/ndk/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi29-clang++)

# Set sysroot
set(CMAKE_SYSROOT /opt/ndk/android-ndk-r27c/toolchains/llvm/prebuilt/linux-x86_64/sysroot)

# Set the compiler flags
#set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS "-static-libstdc++")

#Cross compile lib
conan install ../ -pr:h android_29_arm_clang -pr:b default --build missing

#Generate makefiles.
cmake .. -DCMAKE_TOOLCHAIN_FILE=../toolchain-arm.cmake -DCONAN_DISABLE_CHECK_COMPILER=1

#Make
make -j 8

#conan's profile 
~/ndk_demos/conan_demo/build$ cat ~/.conan/profiles/android_29_arm_clang 
include(default)
# 需要修改为你的Android NDK实际安装位置
android_ndk=/opt/ndk/android-ndk-r27c
target_host=armv7-linux-androideabi
[settings]
arch=armv7
build_type=Release
compiler=clang
compiler.libcxx=c++_static
#compiler.version=8
os=Android
os.api_level=29
[tool_requires]
[options]
[env]
PATH=[$android_ndk/toolchains/llvm/prebuilt/linux-x86_64/bin]
CHOST=$target_host
AR=arm-linux-androideabi-ar
AS=arm-linux-androideabi-as
RANLIB=arm-linux-androideabi-ranlib
CC=$target_host29-clang
CXX=$target_host29-clang++
LD=arm-linux-androideabi-ld
STRIP=arm-linux-androideabi-strip
#CONAN_CMAKE_TOOLCHAIN_FILE=$android_ndk/build/cmake/android.toolchain.cmake
[conf]
tools.android:ndk_path=$android_ndk

build$ cat ~/.conan/profiles/default 
[settings]
os=Linux
os_build=Linux
arch=x86_64
arch_build=x86_64
compiler=gcc
compiler.version=9
compiler.libcxx=libstdc++11
build_type=Release
[options]
[build_requires]
[env]
相关推荐
程序员Android2 分钟前
Android 相机MFNR 拍照trace 分析
android·数码相机
2501_915918413 分钟前
基于Mach-O文件的动态库与静态库归属方案及API扫描实践
android·ios·小程序·https·uni-app·iphone·webview
踏雪羽翼3 分钟前
android 实现google 订阅支付
android·支付·订阅·google订阅·谷歌支付
2501_915106326 分钟前
iOS 证书无法跨电脑使用?签名迁移方法一文讲透
android·ios·小程序·https·uni-app·iphone·webview
Kapaseker10 分钟前
Window 内外藏机巧 旧岗新页见真章
android·kotlin
谪星·阿凯18 分钟前
从XXE遗留疑问到Upload-Labs全通关:文件上传漏洞的溯源与实战突破
android·计算机网络
星轨初途19 分钟前
C++ 类和对象(下):初始化列表、static 成员与编译器优化深度剖析
android·开发语言·c++·经验分享·笔记
恋猫de小郭39 分钟前
Flutter 的 build_runner 已经今非昔比,看看 build_runner 2.13 有什么特别?
android·前端·flutter
xiangpanf11 小时前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx14 小时前
安卓线程相关
android