joz*_*ols 12 c++ android cmake gradle android-ndk
我有多种口味的Android Gradle + CMake(NDK)项目.在切换到之前未构建的flavor之后,子项目中的C++源文件/库被不必要地重建.这是一种预期的输出文件夹是特定于风味的,并且在第一次构建时不存在:
./app/.externalNativeBuild/cmake/prodDebug/armeabi/libs/mylib/libmylib.a
./app/.externalNativeBuild/cmake/devDebug/armeabi/libs/mylib/libmylib.a
Run Code Online (Sandbox Code Playgroud)
但是我有许多口味和大型库要构建,并且不想重建不依赖于风味的C++库 - 在构建时,每个风格都应该有相同的库.我试图通过指定不同的输出目录来解决这个问题,因此它不依赖于味道:
add_subdirectory("libs/mylib" "${CMAKE_CURRENT_SOURCE_DIR}/libs/mylib/output")
Run Code Online (Sandbox Code Playgroud)
现在每个flavor都共享mylib库的相同输出目录,但是这个时间库在切换flavor时会一直重建.使用没有Gradle的普通CMake时,所有工作都按预期工作.从Android Studio/Gradle编译时有没有办法修复不必要的重建?
EDIT1:顺便说一句,即使版本没有指定任何C++标志等,重建也完成了 - 基本上它们只是不同的应用程序/版本名称:
dev {
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
}
prod {
applicationIdSuffix ".prod"
versionNameSuffix "-prod"
}
Run Code Online (Sandbox Code Playgroud)
编辑2:还有另一个重建问题.当更改任何CMakeLists.txt(也是子项目)时,它会触发树的整个重建 - 所有父项目,子项目(甚至是不相关的项目)都会被重建.目前,这是使用Gradle/Android Studio构建NDK项目的一个障碍.
我通过将 CCache 添加到我的 CMakeLists.txt 解决了这个问题:
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
endif(CCACHE_FOUND)
Run Code Online (Sandbox Code Playgroud)
正如这里所描述的:
归档时间: |
|
查看次数: |
585 次 |
最近记录: |