Closed baby7305 closed 3 years ago
-isystem /usr/local/Cellar/opencv/4.5.0_5/include
我看到你这 opencv 的 include 路径已经在了,正常传入了编译器,如果 opencv2/opencv.hpp
还是没找到,那跟 xmake 关系不大, 你首先得到 /usr/local/Cellar/opencv/4.5.0_5/include
这个目录下确认 是否存在 opencv2/opencv.hpp,看下代码里面 include 的头文件路径是否不对
装的opencv4,opencv2下面没东西是正常的吧
装的opencv4,opencv2下面没东西是正常的吧
是否正常我不知道,我不怎么用opencv,反正 /usr/local/Cellar/opencv/4.5.0_5/include
里面有什么,就 include 用什么,这个是库的问题,可以先到 /usr/local/Cellar/opencv/4.5.0_5/include 里面找找 应该用哪个头文件,具体路径在哪里,然后决定怎么 include
既然有,那就针对性include下对应路径 #include <opencv4/opencv2/opencv.hpp>
不就好了么
xmake
[ 50%]: compiling.release src/main.cpp
error: /usr/local/Cellar/opencv/4.5.0_5/include/opencv4/opencv2/opencv.hpp:48:10: fatal error: 'opencv2/opencv_modules.hpp' file not found
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated. warning: target(xmake-opencv-app).add_includedirs("include") path not found at ./xmake.lua:12 可是OpenCV自己内部都引用不到
相同的代码我这边用clion cmake是能识别到opencv的。
那这个没办法,homebrew 给到的 信息,只能检测到 /usr/local/Cellar/opencv/4.5.0_5/include 这个路径,要么你看下 brew 装的 opencv 下面有没有 多个子 pkgconfig 的 .pc 配置,通过 brew::pcre2/libpcre2-8
的方式指定子配置。。
要么你使用 add_requires("opencv")
装,这个包内部自动会给你追加 opencv4 这个子路径到 includes
相同的代码我这边用clion cmake是能识别到opencv的。
cmake 的 find_package 内置脚本里面 比较丰富,内置了 find_opencv的写死的各种探测配置,这种方式是可以,但是会不断增加cmake自身包大小,且不好维护
虽然xmake也有内置的各种 find_xx 脚本,但是目前还没收录 find_opencv 做特殊处理,通常我们更建议走自动化的方式,自动适配,如果没匹配,就走 add_requires("opencv")
的内置仓库包。。
后期 对 find_opencv 等特殊处理脚本,后期也会不断完善,但这块维护起来工作量,所以目前收录的不是很多,回头有时间再改进。
我这边用内置的 add_requires("opencv")
包测了下,并没什么问题,可以直接安装使用。
checking for Xcode directory ... /Applications/Xcode.app
checking for SDK version of Xcode ... 11.0
checking for Codesign Identity of Xcode ... Apple Development: waruqi@gmail.com (T3NA4MRVPU)
checking for /usr/bin/xcrun -sdk macosx clang ... ok
checking for flags (-fvisibility-inlines-hidden) ... ok
checking for flags (-O3) ... ok
checking for ccache ... /usr/local/bin/ccache
[ 50%]: ccache compiling.release src/main.cpp
/usr/local/bin/ccache /usr/bin/xcrun -sdk macosx clang -c -Qunused-arguments -arch x86_64 -mmaco
sx-version-min=10.15 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platf
orm/Developer/SDKs/MacOSX11.0.sdk -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++14
-framework Foundation -framework CoreFoundation -framework CoreGraphics -framework AppKit -fram
ework OpenCL -isystem /Users/ruki/.xmake/packages/o/opencv/4.2.0/d639b7d6e3244216b403b39df5101ab
f/include/opencv4 -isystem /Users/ruki/.xmake/packages/o/openssl/1.1.1h/d639b7d6e3244216b403b39d
f5101abf/include -o build/.objs/opencv/macosx/x86_64/release/src/main.cpp.o src/main.cpp
checking for flags (-MMD -MF) ... ok
checking for flags (-fcolor-diagnostics) ... ok
[ 75%]: linking.release opencv
"/usr/bin/xcrun -sdk macosx clang++" -o build/macosx/x86_64/release/opencv build/.objs/opencv/ma
cosx/x86_64/release/src/main.cpp.o -arch x86_64 -mmacosx-version-min=10.15 -isysroot /Applicatio
ns/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk -stdlib=
libc++ -Wl,-x -L/Users/ruki/.xmake/packages/o/opencv/4.2.0/d639b7d6e3244216b403b39df5101abf/lib
-L/Users/ruki/.xmake/packages/o/openssl/1.1.1h/d639b7d6e3244216b403b39df5101abf/lib -lopencv_sal
iency -lopencv_photo -lopencv_bgsegm -lopencv_videoio -lopencv_quality -lopencv_surface_matching
-lopencv_datasets -lopencv_dnn_objdetect -lopencv_calib3d -lopencv_xphoto -lopencv_features2d -
lopencv_img_hash -lopencv_dnn -lopencv_core -lopencv_rgbd -lopencv_plot -lopencv_freetype -lopen
cv_imgcodecs -lopencv_highgui -lopencv_fuzzy -lopencv_structured_light -lopencv_video -lopencv_t
racking -lopencv_superres -lopencv_reg -lopencv_gapi -lopencv_xobjdetect -lopencv_text -lopencv_
ml -lopencv_ccalib -lopencv_objdetect -lopencv_stereo -lopencv_videostab -lopencv_aruco -lopencv
_face -lopencv_stitching -lopencv_phase_unwrapping -lopencv_xfeatures2d -lopencv_ximgproc -lopen
cv_shape -lopencv_dnn_superres -lopencv_line_descriptor -lopencv_dpm -lopencv_flann -lopencv_hfs
-lopencv_bioinspired -lopencv_imgproc -lopencv_optflow -lssl -lcrypto -framework Foundation -fr
amework CoreFoundation -framework CoreGraphics -framework AppKit -framework OpenCL -lz
[100%]: build ok!
ruki-2:opencv ruki$
-isystem /Users/ruki/.xmake/packages/o/opencv/4.2.0/d639b7d6e3244216b403b39df5101ab f/include/opencv4
而且 opencv4 的子目录也会自动追加
这个可以了么
这里没啥问题 我先 close 了
@waruqi cmake 能直接通过 find_package 找到 OpenCV 不是因为 cmake 本身提供了 FindOpenCV.cmake 脚本,而是 OpenCV 这个工程是用 cmake 管理的,它在 install 的时候会自动生成并安装 OpenCVConfig.cmake 脚本,从而使 cmake 能直接找到。
能不能在 xmake 的 find_package 命令中支持查找 cmake 包呢?也就是查找并解析 Findxxx.cmake 或 xxxConfig.cmake 脚本。这个是可以通过调用 cmake --find-package ...
命令来实现的,它能查找一个包是否存在、包含路径有哪些、链接库有哪些。支持 cmake 包是一个特别实用的功能,毕竟目前非常多用户广泛的C++库是用 cmake 管理的。
另外,现在的 cmake 中 将 A 链接给 B 后,A 的 public 属性(包含路径、依赖项、编译选项等)会自动传递给 B,这样 B 就不需要重复设置这些属性了。比如一个可执行程序 demo 链接了 opencv_core 这个库(即target_link_library(demo PRIVATE opencv_core
),那就不需要再制定 opencv 的包含路径了(即不需要 target_include_directories(demo PRIVATE ${OpenCV_INCLUDE_DIRS})
)。这样的逻辑是很合理的,能简化用户使用包的代码,希望 xmake 能参考一下
@waruqi cmake 能直接通过 find_package 找到 OpenCV 不是因为 cmake 本身提供了 FindOpenCV.cmake 脚本,而是 OpenCV 这个工程是用 cmake 管理的,它在 install 的时候会自动生成并安装 OpenCVConfig.cmake 脚本,从而使 cmake 能直接找到。
能不能在 xmake 的 find_package 命令中支持查找 cmake 包呢?也就是查找并解析 Findxxx.cmake 或 xxxConfig.cmake 脚本。这个是可以通过调用
cmake --find-package ...
命令来实现的,它能查找一个包是否存在、包含路径有哪些、链接库有哪些。支持 cmake 包是一个特别实用的功能,毕竟目前非常多用户广泛的C++库是用 cmake 管理的。
见 https://github.com/xmake-io/xmake/issues/1632
另外,现在的 cmake 中 将 A 链接给 B 后,A 的 public 属性(包含路径、依赖项、编译选项等)会自动传递给 B,这样 B 就不需要重复设置这些属性了。比如一个可执行程序 demo 链接了 opencv_core 这个库(即
target_link_library(demo PRIVATE opencv_core
),那就不需要再制定 opencv 的包含路径了(即不需要target_include_directories(demo PRIVATE ${OpenCV_INCLUDE_DIRS})
)。这样的逻辑是很合理的,能简化用户使用包的代码,希望 xmake 能参考一下
xmake 原本就支持 public ,add_packages("xxx", {public = true}) 其他 add_links defines 都支持 具体见文档
@waruqi cmake 能直接通过 find_package 找到 OpenCV 不是因为 cmake 本身提供了 FindOpenCV.cmake 脚本,而是 OpenCV 这个工程是用 cmake 管理的,它在 install 的时候会自动生成并安装 OpenCVConfig.cmake 脚本,从而使 cmake 能直接找到。 能不能在 xmake 的 find_package 命令中支持查找 cmake 包呢?也就是查找并解析 Findxxx.cmake 或 xxxConfig.cmake 脚本。这个是可以通过调用
cmake --find-package ...
命令来实现的,它能查找一个包是否存在、包含路径有哪些、链接库有哪些。支持 cmake 包是一个特别实用的功能,毕竟目前非常多用户广泛的C++库是用 cmake 管理的。见 #1632
大体搞完,可以看下 https://github.com/xmake-io/xmake/issues/1632#issuecomment-939926197 不过还有一些小坑
@waruqi cmake 能直接通过 find_package 找到 OpenCV 不是因为 cmake 本身提供了 FindOpenCV.cmake 脚本,而是 OpenCV 这个工程是用 cmake 管理的,它在 install 的时候会自动生成并安装 OpenCVConfig.cmake 脚本,从而使 cmake 能直接找到。 能不能在 xmake 的 find_package 命令中支持查找 cmake 包呢?也就是查找并解析 Findxxx.cmake 或 xxxConfig.cmake 脚本。这个是可以通过调用
cmake --find-package ...
命令来实现的,它能查找一个包是否存在、包含路径有哪些、链接库有哪些。支持 cmake 包是一个特别实用的功能,毕竟目前非常多用户广泛的C++库是用 cmake 管理的。见 #1632
大体搞完,可以看下 #1632 (comment) 不过还有一些小坑
强啊👍🏻
描述问题
xmake集成包管理器中的OpenCV不成功,编译不过 `#include
include <opencv2/opencv.hpp>
using namespace std; using namespace cv;
int main() { Mat srcImage = imread("./lianggongchunri_de_youyv-009.jpg"); if (!srcImage.data) { std::cout << "Image not loaded"; return -1; } imshow("[img]", srcImage); waitKey(0); // return 0; }`
`add_rules("mode.debug", "mode.release") -- add_requires("conan::opencv/4.5.0", {alias = "opencv", optional = true, debug = true}) -- add_requires("CONAN::zlib/1.2.11@conan/stable", {alias = "zlib", debug = true}) -- add_requires("CONAN::opencv/4.5.0@conan/stable", {alias = "opencv", debug = true}) -- add_requires("conan::opencv/4.5.0") add_requires("brew::opencv") -- add_requires("opencv")
target("xmake-opencv-app") set_kind("binary") set_languages("cxx14") add_includedirs("include") add_files("src/*.cpp") -- add_packages("opencv") add_packages("brew::opencv") -- add_packages("vcpkg::opencv3/4.3.0")
`xmake -vDP [ 50%]: compiling.release src/main.cpp "/usr/bin/xcrun -sdk macosx clang" -c -Qunused-arguments -arch x86_64 -mmacosx-version-min=10.15 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fvisibility=hidden -fvisibility-inlines-hidden -O3 -std=c++14 -Iinclude -isystem /usr/local/Cellar/opencv/4.5.0_5/include -o build/.objs/xmake-opencv-app/macosx/x86_64/release/src/main.cpp.o src/main.cpp error: @programdir/modules/private/async/runjobs.lua:210: @programdir/modules/private/action/build/object.lua:78: @programdir/modules/core/tools/gcc.lua:480: src/main.cpp:2:10: fatal error: 'opencv2/opencv.hpp' file not found
include <opencv2/opencv.hpp>
1 error generated. stack traceback: [C]: in function 'error' [@programdir/core/base/os.lua:789]: in function 'raise' [@programdir/modules/core/tools/gcc.lua:480]: in function 'catch' [@programdir/core/sandbox/modules/try.lua:127]: in function 'try' [@programdir/modules/core/tools/gcc.lua:429]: [C]: in function 'compile' [@programdir/modules/private/action/build/object.lua:78]: in function 'script' [@programdir/modules/private/action/build/object.lua:91]: in function '_build_object' [@programdir/modules/private/action/build/object.lua:116]: in function 'jobfunc' [@programdir/modules/private/async/runjobs.lua:188]: [C]: in function 'trycall' [@programdir/core/sandbox/modules/try.lua:121]: in function 'try' [@programdir/modules/private/async/runjobs.lua:182]: in function 'cotask' [@programdir/core/base/scheduler.lua:317]:
stack traceback: [C]: in function 'error' @programdir/core/base/os.lua:789: in function 'raise' @programdir/modules/private/async/runjobs.lua:210: in function 'catch' @programdir/core/sandbox/modules/try.lua:127: in function 'try' @programdir/modules/private/async/runjobs.lua:182: in function 'cotask' @programdir/core/base/scheduler.lua:317: in function <@programdir/core/base/scheduler.lua:315> warning: target(xmake-opencv-app).add_includedirs("include") path not found at ./xmake.lua:12`
期待的结果
请尽量清晰精准地描述你所期待的结果。
错误信息
如果可能,请尽量附加程序运行过程中的错误输出信息。
相关环境
请提供编译和运行环境信息,下面是一些必须填写的基础信息,便于我们针对性排查问题:
其他信息
请提供其他附加信息帮助我们诊断问题(比如截图,xmake.lua或者可复现的demo),以及你遇到的问题的一些背景信息。