PROJECT_BINARY_DIR如何设置输出路径
时间: 2023-08-18 17:09:57 浏览: 111
在 CMake 中,可以使用 `set(PROJECT_BINARY_DIR <path>)` 来设置输出路径。其中,`<path>` 是输出路径的具体路径。一般情况下,建议将输出路径设置为项目源代码目录下的 `build` 目录,以避免与源代码混淆。例如:
```
set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/build)
```
在设置了输出路径之后,可以使用 `add_executable()` 或 `add_library()` 等命令来生成可执行文件或库文件,并通过 `TARGET_LINK_LIBRARIES` 命令将生成的文件链接到其他依赖项中。例如:
```
add_executable(myapp main.cpp)
target_link_libraries(myapp mylib)
```
其中,`myapp` 是生成的可执行文件名称,`main.cpp` 是源代码文件,`mylib` 是一个库文件的名称,它将被链接到 `myapp` 中。在生成的可执行文件或库文件中,所有生成的二进制文件都将被输出到 `PROJECT_BINARY_DIR` 目录中。
相关问题
配置好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 内置的变量之一,表示项目的构建目录。
Android Project_BINARY_DIR 输出是空,如何设置这个路径?
在 Android Studio 中,Android 项目的构建过程是由 Gradle 来完成的,而不是 CMake。因此,Android Studio 中不会设置 CMake 的构建目录(即 `Project_BINARY_DIR`)。
如果您需要在 Android Studio 中使用 CMake,可以在 `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 {
cppFlags "-frtti -fexceptions"
arguments "-DCMAKE_BUILD_TYPE=Release"
}
}
}
// 配置 CMake 的路径
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
// 配置支持的 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 的构建目录会自动设置为 `${projectDir}/.cxx/${variant}`, 其中 `${projectDir}` 是项目的根目录,`${variant}` 是当前的构建变体(例如,`debug` 或 `release`)。
如果您需要在 CMake 中使用构建目录,可以使用 `${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 内置的变量之一,表示项目的构建目录。
阅读全文