build/intermediates/ 没有cmake目录
时间: 2023-06-29 15:03:51 浏览: 227
如果你使用的是 Android Studio 4.0 或更高版本,那么可能是因为 Android Studio 默认使用了 Gradle 6.1.x 或更高版本,而这些版本中已经将 CMake 目录更改为了 obj 目录。
因此,你可以在项目的 `app/build.gradle` 文件中添加以下配置,将 CMake 的输出目录更改为 `obj` 目录:
```
android {
...
externalNativeBuild {
cmake {
...
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build/intermediates/obj)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build/intermediates/obj)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build/intermediates/obj)
...
}
}
...
}
```
这样就可以将 CMake 的输出目录更改为 `obj` 目录了。
相关问题
Androidstudio中怎么用cmake编译so
在Android Studio中使用CMake编译so库,可以按照以下步骤进行操作:
1. 打开项目中的CMakeLists.txt文件,可以在项目结构视图中找到。
2. 在CMakeLists.txt文件中添加so库的编译规则,例如:
```
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
src/main/cpp/native-lib.cpp )
# 链接其他库文件,例如系统库
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log library
# included in the NDK.
${log-lib} )
```
3. 在Android Studio中选择Build Variants视图,选择需要编译的build variant,例如debug或release。
4. 在Android Studio中选择菜单栏中的Build -> Make Project,或者使用快捷键Ctrl + F9,开始编译so库。
5. 编译完成后,在项目的app/build/intermediates/cmake目录中可以找到生成的so库文件。
需要注意的是,CMakeLists.txt文件中的编译规则需要根据具体情况进行修改,例如添加其他源文件、链接其他库文件等,具体可以参考Android Studio官方文档中的说明。
配置好cmake构建,但是${PROJECT_BINARY_DIR}输出路径是空的
在 Android Studio 中,CMake 的构建目录(即 `${PROJECT_BINARY_DIR}`)默认是在 `app` 模块的 `build` 目录下的 `.cxx` 目录中。因此,如果您在构建项目之前没有手动创建 `build` 目录,那么该目录可能不存在,导致 `${PROJECT_BINARY_DIR}` 输出为空。
要解决这个问题,可以手动创建 `build` 目录,并在 `app` 模块的 `build.gradle` 文件中配置 CMake 的构建目录。例如,以下是一个简单的 `build.gradle` 文件,其中配置了 CMake 的构建目录:
```gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
// 配置 CMake 构建目录
externalNativeBuild {
cmake {
// 请根据您的实际情况修改此路径
path "CMakeLists.txt"
// 指定构建目录为 app/build/intermediates/cmake/debug/obj
// 其中 debug 可以替换为 release
buildStagingDirectory "intermediates/cmake/debug/obj"
}
}
}
// 配置支持的 ABI
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
}
}
// 配置使用 CMake
externalNativeBuild {
cmake {
version "3.10.2"
}
}
```
在这个例子中,我们通过 `externalNativeBuild` 配置了 CMake 的路径,并通过 `defaultConfig` 的 `externalNativeBuild` 配置了 CMake 的构建目录。注意,我们需要在 `buildTypes` 和 `defaultConfig` 中都配置 `externalNativeBuild`,以确保 CMake 能够正确地工作。
在这种情况下,CMake 的构建目录会自动设置为 `app/build/intermediates/cmake/${variant}/obj`,其中 `${variant}` 是当前的构建变体(例如,`debug` 或 `release`)。
在 CMakeLists.txt 中,您可以使用 `${PROJECT_BINARY_DIR}` 来引用构建目录。例如,以下是一个简单的 `CMakeLists.txt` 文件,其中使用了 `${PROJECT_BINARY_DIR}`:
```cmake
cmake_minimum_required(VERSION 3.10.2)
project(MyApp CXX)
# 输出构建目录
message(STATUS "Build directory: ${PROJECT_BINARY_DIR}")
```
在这个例子中,我们使用 `message` 命令输出构建目录。注意,我们使用的是 `${PROJECT_BINARY_DIR}`,而不是 `Project_BINARY_DIR`。`${PROJECT_BINARY_DIR}` 是 CMake 内置的变量之一,表示项目的构建目录。