【问题标题】:How can I pass specific arguments (example: opencv_dir) to CMake through gradle externaNativeTool?如何通过 gradle externaNativeTool 将特定参数(例如:opencv_dir)传递给 CMake?
【发布时间】:2017-07-31 14:32:00
【问题描述】:

我正在尝试在 Android Studio 中将 CMake 脚本作为具有 OpenCV 依赖项的 externalNativeBuildTool 执行。

我知道我可以在脚本中静态定义 OpenCV 并且我不想在 android studio 中使用 OpenCV 管理器或插件。我只想传递 Opencv_dir 参数以避免将所有头文件和库复制到项目中。

所以,总而言之,我有这个错误:

 Could not find a package configuration file provided by "OpenCV" with   any  of the following names:
    OpenCVConfig.cmake
    opencv-config.cmake

我正在寻找类似的解决方案:

https://developer.android.com/ndk/guides/cmake.html#build-command

但是这些参数都不满足,我试着把Opencv_dir这样放:

externalNativeBuild {
            cmake {
                cppFlags "-std=c++11 -fno-rtti -fexceptions "
                arguments "-DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=18 
               -DOpenCV_DIR="+getOpenCVDir().toString()

            }
        }
def getOpenCVDir() {
    Properties properties = new Properties()
    properties.load(new File(rootDir.absolutePath + "/local.properties").newDataInputStream())
    def externalModuleDir = properties.getProperty('opencv.dir', null)
    if (externalModuleDir == null) {
        throw new GradleException(
                "OpenCV location not found. Define location with opencv.dir in the local.properties file!")
    }
    return externalModuleDir
}

opencvdir 是在本地属性上定义的

opencv.dir={my_sdk_path}/OpenCV-android-sdk/sdk/native/jni

那么有没有办法通过gradle将自定义参数传递给cmake?

提前致谢。

【问题讨论】:

    标签: android opencv android-studio android-ndk cmake


    【解决方案1】:

    我找到了解决办法,有一个错字:

    需要将 CMake 标志作为一个列表。

    之前:

     externalNativeBuild {
                cmake {
                    cppFlags "-std=c++11 -fno-rtti -fexceptions "
                    arguments "-DANDROID_ARM_NEON=ON -DANDROID_PLATFORM=18 
                   -DOpenCV_DIR="+getOpenCVDir().toString()
    
                }
            }
    

    之后:

     externalNativeBuild {
         cmake {
                arguments "-DANDROID_ARM_NEON=TRUE",   
                          "-DOpenCV_DIR="+getOpenCVDir()
    
               cppFlags "-std=c++11 -fno-rtti -fno-exceptions -fpermissive"
                }
            }
    

    现在它可以完美运行,并且可以检测到 opencv_dir。

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2021-10-02
      • 2017-05-19
      • 2011-08-07
      相关资源
      最近更新 更多