首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NDK开发(一) :NDK入门指南

# 设置CMake的最低版本 cmake_minimum_required(VERSION 3.4.1) # 添加源文件或者库 add_library( native-lib # 库的名字...,并将其添加到 Android Studio 项目中,如果您已经拥有原生代码或想要导入预编译原生库,则可跳过此步骤。...创建 CMake 构建脚本 如果您的原生源文件还没有 CMake 构建脚本,则您需要自行创建一个并包含适当的 CMake 命令。 必须将其命名为 CMakeLists.txt。...src/main/cpp/hello-ndk.cpp) 使用 add_library() 向您的 CMake 构建脚本添加源文件或库时,Android Studio 还会在您同步项目后在...以 Android 特定的日志支持库 为例,为了确保您的原生库可以在 log 库中调用函数,您需要使用 CMake 构建脚本中的 target_link_libraries()命令关联库: add_library

97440

CMake学习笔记

这是您运行cmake命令的目录 CMAKE_CURRENT_BINARY_DIR 您当前所在的build目录 PROJECT_BINARY_DIR 当前项目的build目录 源文件变量 创建包含源文件的变量可以使您更清楚地了解这些文件...这对于glob命令尤其重要,如果添加新的源文件,这些命令可能不会始终为您显示正确的结果。...这对库很重要,将在下一个示例中说明。有关此功能的更多详细信息,请参见此处。 C. Static Library 添加静态库 add_library() 函数用于从某些源文件创建一个库。...add_library(hello_library STATIC src/Hello.cpp ) 这将用于创建名为libhello_library.a的静态库,并在add_library调用中包含源文件...注意 如前面的示例所述,我们将源文件直接传递给add_library调用,这是现代CMake的建议。

1.3K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Cmake生成跨平台项目编译解决方案

    如下所示:     add_library(SecondLibrary second_library.cpp)     和add_executable一样,也可以添加多个源文件。     ...add_library(SecondLibrary test.cpp app_util.h app_util.cpp)     默认的是静态库,也可以显式的设置库是否为静态库、动态库或者是模块。...add_library(SecondLibrary SHARED second_library.cpp) 5、set设置变量     前面2小节的add_library和add_executable可以添加多个源文件...add_compile_options函数来添加编译选项,示例如下:         add_compile_options(-std=gnu99)         cmake使用add_definitions函数来为源文件的编译添加由...find_package可以根据cmake内置的.cmake的脚本去找相应的库的模块,调用了find_package成功之后,会有相应的变量“生成”有效。

    5.5K20

    CMake学习笔记

    C++/JAVA项目做准备 CMake安装 1、绝大多数的linux系统已经安装了CMake 2、Windows或某些没有安装过的linux系统,去http://www.cmake.org/HTML/Download.html...main.cpp) 上述例子可以简化的写成 PROJECT(HELLO) ADD_EXECUTABLE(hello main.cpp) 注意:工程名的 HELLO 和生成的可执行文件 hello 是没有任何关系的...但,推荐你全部使用大写指令 语法注意事项 SET(SRC_LIST main.cpp) 可以写成 SET(SRC_LIST “main.cpp”),如果源文件名中含有空格,就必须要加双引号 ADD_EXECUTABLE...,最好不要这样写,可能会有这两个文件main.cpp和main 内部构建和外部构建 上述例子就是内部构建,他生产的临时文件特别多,不方便清理 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式...2,安装头文件与共享库。 静态库和动态库的区别 静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。

    2.1K20

    CMakeLists.txt 语法介绍与实例演练

    设置项目名称 project(demo) 这个命令不是强制性的,但最好都加上。...指定编译包含的源文件 4.1 明确指定包含哪些源文件 add_library(demo demo.cpp test.cpp util.cpp) 4.2 搜索所有的 cpp 文件 aux_source_directory...默认的搜索路径为 cmake 包含的系统库,因此如果是 NDK 的公共库只需要指定库的 name 即可。...主要开关选项 BUILD_SHARED_LIBS:这个开关用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库。...例如,可以将 MathFunctions 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的数学函数来进行运算,否则就调用标准库中的数学函数库。

    2.3K20

    CMake学习笔记(二)——CMake语法

    CMake学习笔记(二)——CMake语法 上一篇学习笔记,笔者简单浏览了CMake官网提供的教程,但感觉并不系统,而且对很多指令并没有进行解释,所以只写了一半就放弃了……而且笔者英语也不好,索性还是直接在国内网站上找别人的总结...开关选项 BUILD_SHARED_LIBS 控制默认的库编译方式。 注:如果未进行设置,使用ADD_LIBRARY时又没有指定库类型,默认编译生成的库都是静态库。...注:如果前文PROJECT()指令中定义的项目名称也定义为CRNode,也没有什么问题,两者之间没有任何关系。 7....:生成库所依赖的源文件 例: ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) 8....(2) IMPORT_PREFIX, IMPORT_PREFIX 与PREFIX, SUFFIX是等价的属性,但针对的是DLL导入库(即共享库目标)。

    5.7K100

    CMake学习笔记(三)——以笔者的Robosub竞赛为例

    ,所以加上前缀lib,后缀.so,完整的库文件名称应该为libcontours_fun.so SHARED:生成库的属性为共享库;此处若为STATIC则为静态库 ${LIB_CONTOUR_SOURCE...}:此处为生成库文件的源码路径,该变量在前面已经被定义。...生成图像客户端目标文件,是基于之前自定义函数部分中的imageprocessing_fun的图像处理函数的,而之前这些函数已经被处理为库文件,被存储在工程生成路径下的lib路径中,所以指令LINK_DIRECTORIES...其余部分在前文已经叙述,此处不再赘述。 经过前面的处理,${PROJECT_BINARY_DIR}/lib下的库文件已经生成完毕。生成文件如图所示: ? 4..../IPCImageClient/ncclient_image_main.cpp) # 链接库文件,以这些库文件为基础生成目标文件 TARGET_LINK_LIBRARIES(IPCImageClient

    1.3K100

    CMake学习笔记合集

    main.cpp) 上述例子可以简化的写成 PROJECT(HELLO) ADD_EXECUTABLE(hello main.cpp) 注意:工程名的 HELLO 和生成的可执行文件 hello 是没有任何关系的...以上面的 ADD_EXECUTABLE 指令为例,如果存在另外一个 func.cpp 源文件 就要写成:ADD_EXECUTABLE(hello main.cpp func.cpp)或者ADD_EXECUTABLE...内部构建和外部构建 上述例子就是内部构建,他生产的临时文件特别多,不方便清理 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录...2,安装头文件与共享库。 静态库和动态库的区别 静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。...,不会构建出静态库,虽然静态库的后缀是.a ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC}) ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC

    2.2K20

    Linux下CMake简明教程

    另外,我们使用了2次aux_source_directory,因为源文件分布在2个目录下,所以添加2次。...: 生成动态库或静态库(第1个参数指定库的名字;第2个参数决定是动态还是静态,如果没有就默认静态;第3个参数指定生成库的源文件) set_target_properties: 设置最终生成的库的名称,还有其它功能...,成功后再运行make, cd到lib目录下进行查看,发现已经成功生成了动态库和静态库, PS:前面使用set_target_properties重新定义了库的输出名称,如果不使用set_target_properties...也可以,那么库的名称就是add_library里定义的名称,只是连续2次使用add_library指定库名称时(第一个参数),这个名称不能相同,而set_target_properties可以把名称设置为相同...---- 七 对库进行链接 既然我们已经生成了库,那么就进行链接测试下。

    1.9K10

    一点多发FTP客户端设计

    项目背景 FileZilla FTP Client这款软件只能手动上传文件到FTP,貌似我还没有找到定时扫描某个本地目录,然后执行定时上传的功能。...Gitee上面了,使用的C/C++库有libcurl、boost、pugixml FTPUpload-Github地址 FTPUpload-Gitee地址 FTPUpload是一款基于MFC的FTP...推送客户端程序,使用了libcurl实现FTP推送,使用pugixml实现xml配置文件的读写,还使用了Boost库用于目录规则的转换(涉及到日期的)。...,以便多次重复传输(这里要注意剔除哪些在本地目录已经不存在但是在数据库中还有上传记录的文件上传记录信息) 程序执行流程图 程序流程图如下图所示: ?...,以便多次重复传输(这里要注意剔除哪些在本地目录已经不存在但是在数据库中还有上传记录的文件上传记录信息) */ int main() { // 创建数据库类对象 signal_log lg; TaskDB

    79920

    关于 CMake 使用,看这一篇可能就够了

    设置项目名称 project(demo) 这个命令不是强制性的,但最好都加上。...(common SHARED util.cpp) # 生成动态库或共享库 add_library 默认生成是静态库,通过以上命令生成文件名字, 在 Linux 下是: demo libcommon.a...指定编译包含的源文件 4.1 明确指定包含哪些源文件 add_library(demo demo.cpp test.cpp util.cpp) 4.2 搜索所有的 cpp 文件 aux_source_directory...默认的搜索路径为 cmake 包含的系统库,因此如果是 NDK 的公共库只需要指定库的 name 即可。...主要开关选项 BUILD_SHARED_LIBS:这个开关用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库。

    5.7K26

    cmake 学习笔记(一)

    ==>先生成一个静态库,链接该库 例子四 ==>将源文件放置到不同的目录 例子五 ==>控制生成的程序和库所在的目录 例子六 ==>使用动态库而不是静态库 例子一 一个经典的C程序,如何用cmake...CMakeList.txt 第一行 project 不是强制性的,但最好始终都加上。...add_library 则告诉生成一个库文件。 注意:CMakeList.txt 文件中,命令名字是不区分大小写的,而参数和变量是大小写相关的。...因为我的可执行程序(add_executable)占据了 hello 这个名字,所以 add_library 就不能使用这个名字了 然后,我们去了个libhello 的名字,这将导致生成的库为 libhello.lib...添加一行 set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello") 就可以了 例子四 在前面,我们成功地使用了库,可是源代码放在同一个路径下

    54110

    面向 C++ 的现代 CMake 教程(二)

    由于没有任何粒度,我们必须对每个翻译单元一视同仁,无法指定不同的编译标志,为代码的某些部分选择更新的语言版本,以及在代码的特定区域静默警告。一切都是全局的,这意味着我们需要同时对所有源文件引入更改。...但如果你只是构建一个可执行文件或库,你可以跳过它们,并将源文件直接存储在 src 中。无论如何,记得在那里添加一个 CMakeLists.txt 文件,并执行任何嵌套的列表文件。...没有它,可执行文件的编译会失败,因为存在未定义的符号。你注意到我们在这个命令在实际上声明了任何库之前就调用了吗?...管理目标源代码 我们已经知道如何告诉 CMake 哪些源文件组成一个目标——一个可执行文件或一个库。我们在使用add_executable()或add_library()时提供文件列表。...有一个中间的-O1级别,根据您的需求,它可以是一个很好的折中方案——它启用了适量的优化机制,而不会使编译速度变得太慢。

    70900

    程序员C语言快速上手——工程篇(十三)

    现在将命令行脚本改写为Makefile脚本,在源码目录下创建一个名为Makefile的文件(亦可以写作makefile),注意,它没有拓展名,编辑如下内容: # 编译一个main.exe 程序 main.exe...它默认执行命令cc -c来编译.c源文件,以main.o为例,它会默认执行cc -c main.c -o main.o。...当我们需要删除临时文件时,只需要删除build目录即可,不会对源码工程造成任何影响。...(${STATIC_LIB}) # 为main程序指定链接静态库calc target_link_libraries(main ${STATIC_LIB}) 静态库与动态库使用add_library...命令默认生成静态库,如add_library (calc add.c sub.c mul.c div.c),亦可加上参数STATIC显式指定,如需生成动态库,则添加参数SHARED,如add_library

    3.1K30

    Android NDK开发扫盲及最新CMake的编译使用

    官方文档分别从以下几个方面介绍了 NDK NDK 的基础概念 如何编译 NDK 项目 ABI 是什么以及不同 CPU 指令集支持哪些 ABI 如何使用您自己及其他预建的库 本节将会对文档进行总结和补充。...但是当我们开发或者使用原生代码时就需要了解不同 ABI 以及为自己的程序选择接入不同 ABI 的库。...(其实官方文档中大部分都是的,并没有使用 CMake) 幸运的是, Github上的官方示例 里面有个项目 hello-libs 实现了如何创建出静态库/动态库,并引用它。...$project/distribution/ 目录,你不需要再编译这个库,二进制文件已经保存在了项目中。...add_library(gmath STATIC src/gmath.c) 之前用到过,编译出一个静态库,源文件是 src/gmath.c set_target_properties 命令的意思是设置目标的一些属性来改变它们构建的方式

    2.4K30

    CMake 秘籍(五)

    我们的示例没有使用这些选项,因为“Hello, World”示例没有任何测试,但在第五章,将您的项目作为超级构建管理中,我们将触发测试步骤。...我们将重用来自第三章,检测外部库和程序中第 8 个食谱,检测 Boost 库的代码示例,但将其重新组织为超级构建的形式。...之前的示例应该已经说服了您超级构建方法在管理具有复杂依赖关系的项目方面的多功能性。...我们从第 3 个配方,构建和链接共享和静态库,在第一章,从简单可执行文件到库中已经知道,CMake 接受以下选项作为add_library的第二个有效参数: STATIC,用于创建静态库;即,用于链接其他目标...这可以通过使用add_library的MODULE选项并阻止在我们的库目标名称中添加任何前缀(例如,Unix 系统上的lib)来实现。

    73120

    NumPy 1.26 中文文档(四十四)

    如果返回 None,则不生成任何源文件。如果处理完所有源文件生成器后 Extension 实例没有源文件,则不会构建扩展模块。...sources序列 库的源文件列表。有关详细信息,请参见 add_library。 install_dirstr 库的安装路径,相对于当前子包。...如果返回 None,则不会生成任何源文件。如果扩展实例在处理所有源代码生成器后没有源文件,则不会构建任何扩展模块。...源文件列表可能包含函数(称为源代码生成器),其必须以扩展实例和构建目录为输入,并返回源文件或源文件列表或 None。如果返回 None,则不会生成任何源文件。...如果扩展实例在处理所有源代码生成器后没有源文件,则不会构建任何扩展模块。

    31410

    深入浅出CMake(一):基础篇

    这是最简单的 cmake 编译例子,但实际工作中是不会有这么简单的,实际工作中会涉及到很多的源文件,还有很多的动态的库,静态的库。 下面讲解一个稍微复杂但完整的例子。...<< endl; say_hello(); return 0; } 上面是 hello.cpp 修改后的代码,它直接调用了 say_hello()方法,这个时候我们需要仔细考虑怎么写 CMakeLists.txt...target_lingk_libraries()这句代码的意思也很容易懂,那就是为可执行文件 hello 链接 libworld.a 这个库。...我们已经具备自己编写简单的 CMakeLists.txt 的能力了,但为了更好的理解和灵活运用我们还需要学习一些关于 cmake 的基本概念。...可执行文件 add_executable()指定了可执行文件,它是 unix 上 a.out 之类的文件和 windows 平台 .exe 文件 库 动态库和静态库都使用 add_library()命令生成

    1.3K30

    CMake 秘籍(八)

    CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) 作为健全性检查,我们可以尝试配置和构建项目,但到目前为止还没有目标...$ make > build.log 在我们的情况下(build.log的完整内容未在此处显示),我们能够验证哪些源文件被编译以及使用了哪些编译标志(-I....由于我们还没有定义任何目标,我们可以从将选项保存在一个中心文件开始,但稍后我们可能会将选项定义移到更接近目标的位置,以限制范围并得到更可重用的 CMake 构建块。...有些源文件是可选的(netbeans.c 应该只在 ENABLE_NETBEANS 为 ON 时构建,channel.c 应该只在 ENABLE_CHANNEL 为 ON 时构建)。...不要将一系列库组合成一个变量并在文件之间传递该变量,而是将库一个接一个地链接到它们定义的位置附近。不要将源文件组合成变量,而是使用target_sources添加源文件。

    19810
    领券