PC机使用CMake编译Android可执行文件

说明

系统环境:mac os
运行条件: 安装cmake 和 下载ndk

创建文件

源文件 hello.cpp

#include<stdio.h>
int main(){
	printf("hello world \n");
	return 0;
}

CMakeCache.txt 文件

cmake_minimum_required(VERSION 3.7)
#include(/Users/Shared/ShareLib/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake)
# 打印当前的环境
if(ANDROID)
    message(STATUS "ANDROID")
elseif(APPLE)
    message(STATUS "APPLE")
elseif(WIN32)
    message(STATUS "WIN32")
elseif(UNIX)
    message(STATUS "UNIX")
else()
    message(FATAL_ERROR "OTHER")
endif()
 
add_executable(hello hello.cpp)
target_include_directories(hello PRIVATE .)


# cmake  -DCMAKE_TOOLCHAIN_FILE=/Users/Shared/ShareLib/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake ..

编译工程

创建build目录并进入

在build目录下执行cmake

cmake  -DCMAKE_TOOLCHAIN_FILE=/Users/Shared/ShareLib/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake ..

其中"/Users/Shared/ShareLib/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake"是本机机器ndk安装交互编译的cmake配置
输出

-- ANDROID_PLATFORM not set. Defaulting to minimum supported version
16.
-- Check for working C compiler: /Users/Shared/ShareLib/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang
-- Check for working C compiler: /Users/Shared/ShareLib/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Users/Shared/ShareLib/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++
-- Check for working CXX compiler: /Users/Shared/ShareLib/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- ANDROID
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/wangshengxing/project/c/ndkcmake/hello/build

由此可以知道目前是使用clang进行编译
此时执行 make ,输出

Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/hello.cpp.o
Androi
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CMake是一个跨平台的构建系统。它可以自动生成Makefile或是Visual Studio的项目文件,以达到构建目标的效果。 静态编译指所有用到的第三方库都会被链接到最终的二进制文件中,因此这种方式生成的可执行文件可以在不同的器上运行,而不必考虑库文件的路径和版本等问题。 下面是一个简单的CMakeLists.txt文件,用于生成一个静态编译的可执行文件。 ```cmake cmake_minimum_required(VERSION 3.5) project(demo) set(CMAKE_CXX_COMPILER "g++") set(CMAKE_CXX_STANDARD 11) set(SOURCES main.cpp) set(LIBRARIES lib1 lib2) include_directories(include) add_executable(demo ${SOURCES}) target_link_libraries(demo ${LIBRARIES}) ``` 在这个例子中,我们定义了一个项目名称为demo,设置了编译器为g++,使用C++11标准进行编译。我们还定义了源码文件名为main.cpp,库文件名为lib1和lib2。在CMakeLists.txt中,我们通过add_executable命令将源码文件编译成可执行文件,并通过target_link_libraries命令将库文件链接到可执行文件中。 在项目目录下执行以下指令: ```bash mkdir build && cd build cmake .. make ``` 即可在build目录下生成可执行文件demo。我们可以使用ldd命令查看可执行文件的依赖关系,发现所有依赖库都已经被链接到了二进制文件中。 ```bash ldd demo ``` 需要注意的是,静态编译的可执行文件可能会比较大,因为它包含了所有的依赖库,因此需要权衡可执行文件的大小和可移植性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值