【问题标题】:How to add a custom MACRO when using NDK?使用 NDK 时如何添加自定义 MACRO?
【发布时间】:2010-10-26 09:10:35
【问题描述】:

我的 NDK 项目中需要一些自定义宏 但是我没有理想的添加方法,也没有找到答案 有人可以帮忙吗? 非常感谢!

【问题讨论】:

    标签: android-ndk


    【解决方案1】:

    如果您想在编译 NDK 代码 (jni) 时添加特殊定义,请将以下内容添加到您的 Android.mk 中:

    LOCAL_CFLAGS    := -DMYDEFINE
    

    这将在您的 c/c++ 代码中定义宏 MYDEFINE。这里是一个例子

    #ifdef MYDEFINE
    // We build the project with this special macro
    #else
    // We build without setting the macro in the LOCAL_CFLAGS
    #endif
    

    【讨论】:

    • 很高兴它起作用了:P所以你可能会接受答案呵呵:P
    • 从我的错误中吸取教训:不要错过-DMYDEFINE中的D
    【解决方案2】:

    如果你理解正确,你需要看看C Preprocessor是如何工作的。

    您有编写 C/C++ 程序的经验吗?首先,您应该对使用本机代码编写的应用程序的哪些部分非常挑剔。此外,您需要记住,在内存分配等方面,本机代码的行为会完全不同,所以这真的不是猜测的地方。

    花一些时间了解 C/C++,明智地设计您的应用程序,以便清楚地定义您想用本机代码编写的部分,并且不会增加您的应用程序崩溃的机会。我猜大多数项目可以在没有原生应用程序部分的情况下完成,所以如果你正在使用它,并且不知道确切你在做什么,你真的应该重新评估它是否是正确与否。

    【讨论】:

    • 我正在做一个迁移,我是android新手,谢谢你的建议!
    • 同意。我想补充一点,如果有人决定为 Android 应用程序混合 Java 和本机代码,请尽量减少跨越 JNI 边界。也就是说:尽量减少 JNI 调用,因为它们相对昂贵。恕我直言,任何发现自己处于无法避免高频 JNI 调用的情况的人都应该认真考虑仅使用 Java。如果不是出于性能原因,那么至少可以防止 JNI 引起的头痛。
    【解决方案3】:

    如果你说的是 android makefile 宏,比如

    $(调用我的目录)

    与 GNU makefile 语法完全相同

    Gnu makefile manual

    例如:

    反向 = $(2) $(1)

    foo = $(调用反向,a,b)

    $(警告$(foo))

    结果:

    b 一个

    【讨论】:

      【解决方案4】:

      定义宏:

      LOCAL_CFLAGS += -DYOUR_MACRO
      

      用值定义宏:

      LOCAL_CFLAGS += -DYOUR_MACRO='"string"'
      

      LOCAL_CFLAGS += -DYOUR_MACRO=123
      

      我个人建议使用 += 而不是 := 以避免 LOCAL_CFLAGS 被覆盖。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 2012-11-11
        • 2014-10-20
        相关资源
        最近更新 更多