配置好cmake构建,但是${PROJECT_BINARY_DIR}输出路径是空的
时间: 2024-03-29 18:40:15 浏览: 170
自定义构建魔法:在CMake中配置自定义命令的艺术
在 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 内置的变量之一,表示项目的构建目录。
阅读全文