相关疑难解决方法(0)

字符串化 - 它是如何工作的?

我知道:

#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".

为什么?该过程涉及哪些步骤?

c c++ stringification c-preprocessor

50
推荐指数
2
解决办法
3万
查看次数

无法为参数找到方法cppFlags()arguments()

我正在尝试使用

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)

c++ android cmake android-ndk ndk-build

13
推荐指数
1
解决办法
4042
查看次数

如何为每个Android ABI设置产品风味中的CmakeLists路径?

我需要为每个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".但那失败了,所以尝试了相同的名字.

如何解决这个问题还是有解决方法?

android cmake android-gradle-plugin

6
推荐指数
1
解决办法
1577
查看次数