我知道:
#define foo 4
#define str(s) #s
Run Code Online (Sandbox Code Playgroud)
与str(foo)写出:"foo"因为字符串化的第一个文本扩展的执行,但这样的:
#define xstr(s) str(s)
#define str(s) #s
#define foo 4
Run Code Online (Sandbox Code Playgroud)
与xstr(foo)写出:"4".
为什么?该过程涉及哪些步骤?
我正在尝试使用
std::function
Run Code Online (Sandbox Code Playgroud)
但是编译器会抛出错误
Error:(50, 10) error: no type named 'function' in namespace 'std'
Run Code Online (Sandbox Code Playgroud)
我试图修改build.gradle文件
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
cmake {
cppFlags "-std=c++11"
arguments "-DANDROID_STL=gnustl_static"
path 'src/main/jni/CMakeLists.txt'
}
}
Run Code Online (Sandbox Code Playgroud)
但它不接受除以外的参数path并抛出以下错误
Error:(28, 0) Could not find method arguments() for arguments [-DANDROID_STL=gnustl_static] on object of type com.android.build.gradle.internal.dsl.CmakeOptions.
Run Code Online (Sandbox Code Playgroud)
请帮助我使用
std::function
Run Code Online (Sandbox Code Playgroud)
UPDATE
感谢@Alex Cohn我能够配置标志和参数,现在我的文件看起来像那样
apply plugin: 'com.android.library'
android {
compileSdkVersion 25
buildToolsVersion '26.0.2'
defaultConfig {
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake …Run Code Online (Sandbox Code Playgroud) 我需要为每个Android ABI分别设置一个CMakeLists.txt.我尝试使用产品flavor来设置CMakeLists.txt的路径.但是我./gradlew assembleDebug从命令行运行或任何其他gradle命令时遇到以下错误.
无法在com.android.build.gradle.internal.dsl.ExternalNativeCmakeOptions类型的对象上找到参数[CMakeLists.txt]的方法path().
以下是我在build.gradle中设置产品风格的方法.
productFlavors {
arm64_v8a {
ndk {
abiFilters "arm64-v8a"
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
x86_64 {
ndk {
abiFilters "x86_64"
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
注 - 我最初将文件命名为"CMakeLists_arm64-v8a.txt"和"CMakeLists_x86_64.txt".但那失败了,所以尝试了相同的名字.
如何解决这个问题还是有解决方法?