我正在尝试使用CMake实现跨平台构建系统.现在该软件有一些依赖性.我自己编译并将它们安装在我的系统上.
安装的一些示例文件:
-- Installing: /usr/local/share/SomeLib/SomeDir/somefile
-- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile
-- Installing: /usr/local/lib/SomeLib/somesharedlibrary
-- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake
-- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake
Run Code Online (Sandbox Code Playgroud)
现在,CMake有一个find_package()打开Find*.cmake文件并在系统上的库之后搜索并定义一些变量等SomeLib_FOUND.
我的CMakeLists.txt包含这样的内容:
set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
Run Code Online (Sandbox Code Playgroud)
第一个命令定义了CMake在搜索之后搜索的位置,Find*.cmake并且我添加SomeLib了FindSomeLib.cmake可以找到的目录,因此find_package()按预期工作.
但这find_package()有点奇怪,因为存在的原因之一是远离非跨平台硬编码路径.
这通常是怎么做的?我应该将cmake/目录复制SomeLib到我的项目中并设置CMAKE_MODULE_PATH相对吗?
我CMakeLists.txt在C++中编写了一个使用OpenCV库的项目.当我尝试使用cmake创建项目时,我遇到了下一个配置问题:
CMake Error at CMakeLists.txt:15 (find_package):
Could not find module FindOpenCV.cmake or a configuration file for package
OpenCV.
Adjust CMAKE_MODULE_PATH to find FindOpenCV.cmake or set OpenCV_DIR to the
directory containing a CMake configuration file for OpenCV. The file will
have one of the following names:
OpenCVConfig.cmake
opencv-config.cmake
Run Code Online (Sandbox Code Playgroud)
事实是我有一个环境变量用于我在Visual Studio中使用的路径没有问题.如果我不包含OpenCV,那么我可以配置和生成没有问题,但我需要解决问题.我不明白为什么cmake找不到OpenCV路径或如何解决它.
我还使用了此链接中提到的建议: FindOpenCV.cmake
有人也有这个问题吗?
我刚开始使用Clion IDE.也许这是写在某个地方,但我没有在谷歌搜索中看到它.如果我在我的CMake脚本中放入一个message()调用,我可以在Clion中看到输出吗?这些消息调用是我知道如何调试我的CMake脚本的唯一方法.
我实际上正在寻找一种方法来使用OpenBV与JetBrains的Clion创建应用程序.
我已经用Choco安装了OpenCV,所以我在C:\ opencv中拥有所有东西
这是我与Clion的项目
的CMakeLists.txt:
cmake_minimum_required(VERSION 3.3)
project(test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories("C:\\opencv\\build\\include\\")
FIND_PACKAGE( OpenCV REQUIRED core highgui imgproc)
set(OpenCV_FOUND TRUE)
set(SOURCE_FILES main.cpp)
add_executable(prog ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)
和main.cpp:
#include <opencv2/opencv.hpp>
int main() {
cv::Mat img = cv::imread("./test.jpg", -1);
cv::imshow("Mon image", img);
cv::waitKey(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并且对构建的响应是:
undefined reference to `cv::imread(cv::String const&, int)'
Run Code Online (Sandbox Code Playgroud)
所有OpenCV函数的未定义错误
你知道为什么它不起作用吗?
由于保存我的 CMakeLists 和/或构建项目时出现奇怪的错误,我无法让我的 CLion 构建项目:
Error:Found package configuration file:
/usr/share/opencv/OpenCVConfig.cmake
but it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to be NOT FOUND.
源文件:
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )
{
Mat image;
image = imread( "lena.jpg", 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.3)
project(Test)
find_package( OpenCV …