【问题标题】:CMake set target properties called with incorrect number of arguments使用错误数量的参数调用 CMake 设置目标属性
【发布时间】:2020-03-29 19:32:26
【问题描述】:

我正在尝试在我的项目中使用 OpenCV 库,但在运行时出现此错误:

构建命令失败。执行过程时出错 D:\Sdk\cmake\3.6.4111459\bin\cmake.exe 带参数 {-HC:\Users\Mouad AITALI\AndroidStudioProjects\BGREMOVER\app -BC:\Users\Mouad AITALI\AndroidStudioProjects\BGREMOVER\app.cxx\cmake\debug\arm64-v8a -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-16 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=C:\Users\Mouad AITALI\AndroidStudioProjects\BGREMOVER\app\build\intermediates\cmake\debug\obj\arm64-v8a -DCMAKE_BUILD_TYPE=调试 -DANDROID_NDK=D:\Sdk\ndk\19.2.5345600 -DCMAKE_CXX_FLAGS=-std=c++11 -DCMAKE_TOOLCHAIN_FILE=D:\Sdk\ndk\19.2.5345600\build\cmake\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=D:\Sdk\cmake\3.6.4111459\bin\ninja.exe -GAndroid Gradle - Ninja} -- 配置不完整,出现错误!另请参阅“C:/Users/Mouad AITALI/AndroidStudioProjects/BGREMOVER/app/.cxx/cmake/debug/arm64-v8a/CMakeFiles/CMakeOutput.log”。

CMakeLists.txt:13 (set_target_properties) 处的 CMake 错误:
使用错误数量的参数调用 set_target_properties。

CMakeLists.txt

#declare folder path
set(pathToProject C:\\Users\\Mouad;AITALI\\AndroidStudioProjects\\BGREMOVER)

cmake_minimum_required(VERSION 3.4.1)

set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

include_directories(${pathToOpenCv}/sdk/native/jni/include)

#library location
add_library(lib_opencv SHARED IMPORTED)
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so)

#define libraries
add_library(native-lib SHARED src/main/cpp/native-lib.cpp)
add_library(grabcut SHARED src/main/cpp/jni-grabcut-lib.cpp src/main/cpp/grabcutter_p.cpp src/main/cpp/grabcutter_p.h)

find_library(log-lib log)

#target libraries
target_link_libraries(native-lib ${log-lib} lib_opencv)
target_link_libraries(grabcut ${log-lib} lib_opencv)

【问题讨论】:

  • 您的 pathToProject 变量在路径中有分号。这是故意的吗?
  • IMPORTED_LOCATION 的值括在双引号中。对pathToProject 变量的值执行相同的操作。否则,由于分号,CMake 将它们视为 list
  • @Tsyvarev 非常感谢您的评论

标签: android c++ cmake


【解决方案1】:

如前所述,CMake 使用分号 ; 来定义列表。因此,如果路径包含分号,则必须将定义和使用变量pathToProject 的位置用双引号括起来:

set(pathToProject "C:\\Users\\Mouad;AITALI\\AndroidStudioProjects\\BGREMOVER")

...

set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION "${pathToProject}/app/src/main/jniLibs/${ANDROID_ABI}/libopencv_java3.so")

IMPORTED_LOCATION 属性只接受一个值。因此,当您提供该属性的列表时,set_target_properties() 命令无法正确解析参数,从而产生错误。

【讨论】:

  • 谢谢你的回答,我知道这应该是另一个问题,但我现在明白了:ninja: error: 'C:/Users/Mouad;AITALI/AndroidStudioProjects/BGREMOVER/app/src/main/jniLibs/arm64-v8a/libopencv_java3.so', needed by '../../../../build/intermediates/cmake/debug/obj/arm64-v8a/libgrabcut.so', missing and no known rule to make it
  • libopencv_java3.so实际上是否存在于那个位置?
  • MouadAITALI 之间的屏幕截图中,有一个空格,而不是您在pathToProject 变量中使用的分号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 2022-09-10
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多