OpenCV VS 2010 C++ CMake

joh*_*ohn 5 c++ opencv cmake

我找不到这个简单问题的答案.我在使用Dev C++或VS 2010在我的计算机上运行OpenCV时遇到了问题.

我的问题不是关于具体细节,而是关于CMake对该过程的贡献.

我通过很多C++程序学习语言.但是,我编写并编译它们,没有大惊小怪,直接在Dev C++上使用标准包含等.

现在我来尝试使用我的第一个第三方库集,有一个巨大的下载可执行文件的过程,使用CMake,然后使用其中一个IDE进行编译.对我来说,毫无疑问,事情出了问题.步骤太多,目的是什么?

好的,所以我对编程很幼稚和简单.所以这是我的问题:

如果之后必须执行三个步骤,为什么还有可执行文件?我有点理解编写者是否不知道每个人都在使用什么编译器; 但为什么不只是一组简单的源代码并完成它?

但是,如果VS 2010有一个特定的文件,为什么不让它自己完全按照它在计算机上的工作方式设置?,就像每个人以相同的格式下载VS 2010然后自行安装一样?

最后,即使需要某种安装程序来创建目录结构(我仍然不理解,因为Zip,tar等工作正常),为什么还需要CMake?

我不介意因为愚蠢和缺少一些明显的观点而被人嘲笑,但我会感激不必匆匆通过快速反驳:你可能看起来很简单,但从外面来看,它没有多大意义.先谢谢你,约翰


谢谢.我想我不了解过程的细节,以了解为什么这是必要的.或者更确切地说,我有点理解:有不同的操作系统和不同的编译器,但即使每个编码都不同,CMake也会理解它列出的编译器,因此开发人员只需要弄清楚如何为CMake编写代码.如果CMake不了解环境或编译器,则库作者或开发人员必须弄清楚如何将其移植到该特定环境.但是,我仍然不明白为什么VS 2010的情况,因为OpenCV已经有一个特定的编译器,CMake是必要的.但是,我暂时不管它,继续前进.

再次感谢.


我想我需要添加评论.回答"这真的是一个问题吗?"这个问题.我认为答案必须是肯定的.我浪费了将近一周时间试图让OpenCV与VS 2010合作.

没有人,从微软网站到独立博客都能够帮助我.我已经通过sxstrace等尝试了所有人的建议.最后是同样的问题.

所以是的,这确实是一个问题.我此刻并不想学习Windows编程.我现在也不想学习CMake的复杂性.为Windows安装的.exe程序一直对我有用.我确信有例外但个人没有.因此,如果OpenCV推出了一个特殊的2008.exe版本,为什么不让它一直运行.


顺便说一下,这是sxstrace文本文件的输出:

Inizio generazione contesto di attivazione.参数di输入:标志= 0 ProcessorArchitecture = x86 CultureFallBacks = it-IT;它ManifestPath = C:\ Windows\system32\cxcore210d.dll AssemblyDirectory = C:\ Windows\system32\Application Config File =

INFORMAZIONI:corso中的analisi del file宣言C:\ Windows\system32\cxcore210d.dll.INFORMAZIONI:l'identitàdidefinizione delmanifestoè(null).INFORMAZIONI:riferimento:Microsoft.VC90.DebugCRT,processorArchitecture ="x86",publicKeyToken ="1fc8b3b9a1e18e3b",type ="win32",version ="9.0.21022.8"INFORMAZIONI:risoluzione del riferimento Microsoft.VC90.DebugCRT,processorArchitecture ="x86 ",publicKeyToken ="1fc8b3b9a1e18e3b",在corso中输入="win32",版本="9.0.21022.8".INFORMAZIONI:每个ProcessorArchitecture x86在corso的risoluzione del riferimento.INFORMAZIONI:risoluzione del riferimento per la lingua中立于corso.INFORMAZIONI:适用于corso的应用程序.INFORMAZIONI:Criteri di autore non trovati.INFORMAZIONI:reindirizzamento criteri di binding non trovato.INFORMAZIONI:inizio dell'esecuzione del probe dell'assembly.INFORMAZIONI:在WinSxS中汇编非trovato.INFORMAZIONI:tentativo di esecuzione del probe del manifesto in C:\ Windows\assembly\GAC_32\Microsoft.VC90.DebugCRT\9.0.21022.8__1fc8b3b9a1e18e3b\Microsoft.VC90.DebugCRT.DLL.INFORMAZIONI:tentativo di esecuzione del probe del manifesto in C:\ Windows\system32\Microsoft.VC90.DebugCRT.DLL.INFORMAZIONI:tentativo di esecuzione del probe del manifesto in C:\ Windows\system32\Microsoft.VC90.DebugCRT.MANIFEST.INFORMAZIONI:在C:\ Windows\system32\Microsoft.VC90.DebugCRT\Microsoft中的tentativo di esecuzione del probe del宣言.VC90.DebugCRT.DLL.INFORMAZIONI:tentativo di esecuzione del probe del manifesto in C:\ Windows\system32\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST.INFORMAZIONI:每个语言的中性非宣言.INFORMAZIONI:dell'esecuzione del probe dell'assembly.INFORMAZIONI:impossibile risolvere il riferimento Microsoft.VC90.DebugCRT,processorArchitecture ="x86",publicKeyToken ="1fc8b3b9a1e18e3b",type ="win32",version ="9.0.21022.8".错误:generazione del contesto di attivazione non riuscita.Fine generazione contesto di attivazione.INFORMAZIONI:每个语言的中性非宣言.INFORMAZIONI:dell'esecuzione del probe dell'assembly.INFORMAZIONI:impossibile risolvere il riferimento Microsoft.VC90.DebugCRT,processorArchitecture ="x86",publicKeyToken ="1fc8b3b9a1e18e3b",type ="win32",version ="9.0.21022.8".错误:generazione del contesto di attivazione non riuscita.Fine generazione contesto di attivazione.INFORMAZIONI:每个语言的中性非宣言.INFORMAZIONI:dell'esecuzione del probe dell'assembly.INFORMAZIONI:impossibile risolvere il riferimento Microsoft.VC90.DebugCRT,processorArchitecture ="x86",publicKeyToken ="1fc8b3b9a1e18e3b",type ="win32",version ="9.0.21022.8".错误:generazione del contesto di attivazione non riuscita.Fine generazione contesto di attivazione.generazione del contesto di attivazione non riuscita.Fine generazione contesto di attivazione.generazione del contesto di attivazione non riuscita.Fine generazione contesto di attivazione.

这是调试输出.

'Hello Saturday Night.exe':加载'C:\ Users\jake\Documents\Visual Studio 2010\Projects\Hello Saturday Night\Debug\Hello Saturday Night.exe',符号已加载.'Hello Saturday Night.exe':加载'C:\ Windows\System32 \ntdll.dll',加载符号(删除源信息).'Hello Saturday Night.exe':加载'C:\ Windows\System32\kernel32.dll',加载符号(删除源信息).'Hello Saturday Night.exe':加载'C:\ Windows\System32\cxcore210d.dll',无法找到或打开PDB文件Debugger ::在进程加载期间抛出了未处理的不可持续异常线程'Win32 Thread'( 0x1140)已退出代码-1072365566(0xc0150002).线程'Win32 Thread'(0xf1c)已退出,代码为-1072365566(0xc0150002).该程序 '

Moo*_*ice 5

我想你可能会误解谁最有利于CMake.它是图书馆的作者,并且有充分的理由.在创作跨平台库时,需要为不同的操作系统和编译器提供构建环境.有很多组合.维护大型库项目的这些生成文件和项目/解决方案是一项劳动密集型任务,尤其是在添加或删除新文件的情况下.

CMake从中解脱出来.它以独立编译器的方式生成构建,允许源代码的作者维护单个构建环境.现在,项目可以轻松地跨平台和编译器分发.

所以是的,对于使用该库的开发人员来说,这是一个额外的步骤,但是你只需要每次发布一次,这真的是一个很大的问题吗?