android cmake目录,CMAKE for android,如何包含子目录生成的头文件

我正在构建一个以https://github.com/j0r1/JRTPLIB为子目录的项目,因为我需要在构建项目之前先在其中构建一些内容。我添加了一个基于的依赖项

add_subdirectory(../third_party/JRTPLIB jrtplib)

add_library(myRtspClient SHARED ${SOURCES})

add_dependencies(myRtspClient jrtplib-shared)

其中jrtplib-shared是../third_party/JRTPLIB CMakeLists文件中的目标。

正如您所看到的here,生成了一些头文件并放置在一个非常规的地方。我项目中的这个地方是

android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/jrtplib

其中jrtplib名称来自add_subdirectory(../third_party/JRTPLIB jrtplib)行

请注意,它还会将文件生成为 android/app/.externalNativeBuild/cmake/debug/x68/jrtplib

我需要将android/app/.externalNativeBuild/cmake/debug/armeabi-v7a/jrtplib或android/app/.externalNativeBuild/cmake/debug/x86/jrtplib中生成的头文件包含到我的项目中以完成编译。

我显然尝试include_directories(jrtplib),但它没有用,找不到文件。

那么我应该如何包含从子目录生成的头文件?

更新

1 error generated.

FAILED: /android-sdk-linux/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=i686-none-linux-android --gcc-toolchain=/android-sdk-linux/ndk-bundle/toolchains/x86-4.9/prebuilt/linux-x86_64 --sysroot=/android-sdk-linux/ndk-bundle/sysroot -DmyRtspClient_EXPORTS -I/home/project/src/jscam/myRtspClient/myRtspClient/include -I/home/project/src/jscam/myRtspClient/myRtspClient/../third_party/Base64_live555/include -I/home/project/src/jscam/myRtspClient/myRtspClient/../third_party/md5/include -Ijrtplib/src -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include -isystem /android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -isystem /android-sdk-linux/ndk-bundle/sysroot/usr/include/i686-linux-android -D__ANDROID_API__=16 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fno-limit-debug-info -fPIC -MD -MT CMakeFiles/myRtspClient.dir/MediaSession.cpp.o -MF CMakeFiles/myRtspClient.dir/MediaSession.cpp.o.d -o CMakeFiles/myRtspClient.dir/MediaSession.cpp.o -c /home/project/src/jscam/myRtspClient/myRtspClient/MediaSession.cpp

In file included from /home/project/src/jscam/myRtspClient/myRtspClient/MediaSession.cpp:17:

/home/project/src/jscam/myRtspClient/myRtspClient/include/myRtpSession.h:19:10: fatal error: 'rtpsession.h' file not found

#include "rtpsession.h"

^~~~~~~~~~~~~~

1 error generated.

ninja: build stopped: subcommand failed.

CMake是一个跨平台的自动化构建系统,它使用CMakeLists.txt文件来控制构建过程。如果你想要使用CMake来将一个头文件(.h)生成库文件(.lib),通常意味着你想要创建一个接口库(interface library)或者静态库(static library),因为头文件本身并不包含编译后的二进制代码,不能直接生成动态链接库(.dll或.so)或静态库文件(.lib或.a)。 接口库主要用于存放头文件,它不包含实际的编译目标,但可以被其他目标包含。静态库则是将多个对象文件打包成一个文件,可以被其他项目链接。 以下是一个简单的例子来说明如何使用CMake创建一个接口库: 1. 创建CMakeLists.txt文件,并写入以下内容: ```cmake # 指定CMake的最低版本要求 cmake_minimum_required(VERSION 3.0) # 设置项目名称 project(MyLibrary) # 创建接口库,不需要源文件 add_library(MyLibrary INTERFACE) # 将头文件包含目录添加到接口库中 target_include_directories(MyLibrary INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) ``` 2. 将你的头文件放在CMakeLists.txt所在的目录或者子目录下。 3. 运行CMake生成构建系统文件,可以使用命令行或CMake GUI工具。 如果你想要创建一个静态库,你的CMakeLists.txt可能会看起来像这样: ```cmake # 指定CMake的最低版本要求 cmake_minimum_required(VERSION 3.0) # 设置项目名称 project(MyStaticLibrary) # 指定静态库的源文件 add_library(MyStaticLibrary STATIC my_source_file.cpp ) # 将头文件包含目录添加到静态库中 target_include_directories(MyStaticLibrary PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) ``` 然后运行CMake生成构建系统文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值