-- c++的编译环境及交叉编译(CMake,MingW,CygWin..)
【官网】:#
应用场景
对于自己的或者开源项目的c++项目的编译,我们通常遇到一些问题,需要用这些工具来处理项目工程的配置,编译过程控制,交叉环境配置等基础资源
无
使用须知
如果是c++开源项目,务必仔细查阅官方文档以及编译安装说明。
配置步骤
>c/c++的编译命令工具.
>>Mingw.
[参考1]windows下MingW各个包的作用:参考.
>>Cygwin.
[问题1]cygwin的安装,编译,调试.
[问题2]cygwin的安装教程.
https://www.cnblogs.com/xym4869/p/12232331.html
[问题3]完全下载及安装.
https://blog.csdn.net/yilovexing/article/details/51911252
[问题4]添加安装包.
https://blog.csdn.net/OOFFrankDura/article/details/103914411
>>Cmake.
官网:https://cmake.org/documentation/
入门教程:https://www.hahack.com/codes/cmake/
下载地址:https://cmake.org/download/
[问题1]有时Cmake中找不到vs的高级版本?
需要下载最新版的Cmake可以看到.
[问题2]Cmake提示”could not find any instance of Visual Studio.”
本机没有安装所配置的vs版本。需要进行调整配置或者安装指定版本的vs.
[问题3]”CMake Error at CMakeLists.txt:28 (TARGET_LINK_LIBRARIES):
Cannot specify link libraries for target "MathRunner" which is not built by
this project.”.
#编译为静态链接库(这个顺序必须放到ADD_EXECUTABLE后面,否则会出问题)
TARGET_LINK_LIBRARIES (MathRunner ${EXTRA_LIBS})
#编译为.exe
ADD_EXECUTABLE (MathRunner ${DIR_UI_SRCS})
<解决办法>调整 TARGET_LINK_LIBRARIES与ADD_EXECUTABLE 的顺序即可.
[问题4]想清除配置,重新来.
>>linux上编译及交叉编译.
>>>linux开发环境的搭建.
https://www.jianshu.com/p/78a1f1d4c55c
https://www.cnblogs.com/wuxiushu/p/5910629.html
https://www.linuxidc.com/Linux/2017-03/141704.htm
>>>linux上编译调试c++的常用命令.
https://www.cnblogs.com/yyehl/p/6862153.html
>>>vs2017+linux的开发环境.
https://www.cnblogs.com/yearsj/p/9600682.html
https://www.pianshen.com/article/8592852387/
https://zhuanlan.zhihu.com/p/30950892
https://www.cnblogs.com/xylc/p/6533716.html
>>>ubantu上生成.exe.
https://blog.csdn.net/linken_yue/article/details/82899975
>>>testdisk在linux下的编译.
https://blog.csdn.net/TSZ0000/article/details/101679501
<问题1>At least one of ncursesw,ncurses,pdcurses,curses library must be present.
[注1]yum -y install ncurses-devel .
Yum -y install uuid-devel
yum install e2fsprogs-devel uuid-devel libuuid-devel
[结果]
[注2]安装mingw之前.
yum install gcc-c++ patch git
[注3]
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
<参考>https://fedoraproject.org/wiki/EPEL
yum install mingw64-gcc
>>>一个交叉编译的例子(linux上编译输出.exe并在windows上运行).
https://www.jianshu.com/p/7c7990353820
https://blog.csdn.net/yaoqiwaimai/article/details/82790122
Mingw64工具链的构建过程:
>>Cmake,Makefile,Makefile.am,Makefile.in,CMakeList.txt.
[注1]makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具.
[注2]由于不同操作系统上甚至不同开发工具的make以来的makefile标准不一样,导致想实现跨平台开发一次开发到处编译变得很困难。CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。
[参考]https://blog.csdn.net/qq_28038207/article/details/80791694
[注3]
A1: makefile.am 与 makefile.in避免重复编译,减少等待时间之用。
A2: make install 时用
A3: automake 读取 Makefile.am 来产生 Makefile.in,
configure 读取 Makefile.in 来产生 Makefile
configure 脚本通常由 autoconf 读取 configure.in 产生
目的就是让程序员只写一个规则:.am文件/或.in文件, 就能生成适合各种配置/平台的Makfiles。
>>vc与visual studio版本对应关系.
Visual Studio 6 : vc6
Visual Studio 2003 : vc7
Visual Studio 2005 : vc8
Visual Studio 2008 : vc9
Visual Studio 2010 : vc10
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
Visual Studio 2017 : vc15
Visual Studio 2019 : vc16
>>关于windows,mac,linux上的可执行程序的格式.
Windows: pe
Linux: ELF
Mac(ios): math-o(Math-Object)
[注1]Linux下的文件不需要扩展名。一切皆文件,包含设备文件、目录文件、普通文件等。
要知道是否是可执行文件,一般是通过 ls -l 命令看文件属性中是否包含可执行权限 (x)。
为了提高文件可读性您仍可以使用文件名扩展,但这对 Linux 系统来说没有任何作用.
常见问题
快速入门
>编译遇到的问题及处理.
>>github上的c++项目的编译.
[参考]
<注1>从项目的makefile判断,您将需要构建MINGW中的所有文件.
搜索Internet上其他位置的二进制文件。通常,DuckDuckGo之类的搜索引擎(或Google,如果愿意的话)会很容易找到想要的东西。尝试搜索<application name> for Windows或<application name> exe。
自己编译。您需要至少具有一些编程语言的基本知识才能做到这一点。同样,搜索引擎可以提供巨大帮助。尝试搜索compile <application name> on Windows或MinGW compile <application name>。
在这里,我将介绍Widnows编译实用程序的基础知识:
下载MinGW。我个人比较喜欢此程序包,因为它带有boost(多个应用程序使用)和一个很酷的shell。它还带有git,如果您想编译托管在Github或其他Git版本控制存储库上的文件而不必单独下载源代码,则它非常有用。
在cmd或中运行以下命令powershell:
cd c:\sources\hello:将目录更改为源文件所在的位置。
g++ helloworld.cpp -o helloworld.exe:这helloworld.cpp是主源文件helloworld.exe的名称,也是编译后的可执行文件的名称。
如果您必须编译多个文件,请在-o切换之前列出它们:g++ helloworld.cpp foo.cpp -o helloworld.exe
这些是C ++的说明。如果您要处理使用C语言编写的应用程序,则文件扩展名为,.c而不是.cpp,而应使用gcc命令代替g++。其余部分大致相同
请注意,您可能需要指定更多命令行参数才能编译可执行正常的可执行文件。项目页面通常将包含这些详细信息。
您可能还需要研究makefile。这篇 Stack Overflow帖子通常是关于makefile的,这告诉我们如何在MinGW中使用它们。如果项目带有Makefile,请在手动编译源代码之前尝试一下。
您现在应该可以运行了helloworld.exe。
注意:大多数项目都带有README文件。请执行其名称所隐含的含义,这些文件包含有关编译和运行软件的重要信息,并且通过阅读它可以避免很多不必要的麻烦。
1注意:有时bin下载的文件中可能有一个名为的文件夹,其中应包含可用的可执行文件/二进制文件
如果要在Windows上使用GNU / Linux命令行实用程序,另请参见Cygwin和GOW。我在此处提供了一些有用的可执行文件的最新版本,以供下载。
进一步阅读:
http : //www.mingw.org/wiki/MinGW_for_First_Time_Users_HOWTO
https://gcc.gnu.org/onlinedocs/index.html#dir
https://stackoverflow.com/questions/22873884/how-do-i用mingw运行配置
<注2>
首先要注意的是,没有一种从源代码构建应用程序的方法。大约有与不同项目一样多的变体。也就是说,这是一些常规步骤:
如果幸运的话,项目通常会在README文件中提供构建说明。有时,可能还会有INSTALL文件或其他文档可用。如果可用,请按照说明进行操作。他们是你最好的选择。
就像其他人所说的,不幸的是,在没有说明的情况下很难重构所需的构建步骤。但是,我们至少可以在这里做出最大的努力,这将适用于大多数简单的项目。
缺少说明
如果找到带有.sln或.vcxproj扩展名的文件,则可能是MSBuild / Visual Studio项目。下载Visual Studio Community或Express(用于C ++)的副本,在其中打开该项目文件,然后单击工具栏中的播放按钮(或使用生成菜单)。
如果找到一个Makefile,可能会需要make。但这是事情变得更加困难的地方,因为有许多使用的独立和不兼容的系统make。
由于它是针对Windows的,因此可能会使用MinGW。下载该文件的副本,从开始菜单启动MSYS,导航(cd)到包含项目的目录,然后运行make。
在极少数情况下使用Cygwin(不幸的是,没有简单的方法可以告诉您,但如果MinGW产生与“ posix”相关的错误,这是一个不错的选择),则必须安装Cygwin。不幸的是,这不会构建本机Windows二进制文件-您每次都必须通过Cygwin启动该程序。
“构建工具”可以是名称build.bat或类似名称的自定义脚本。在这种情况下,您必须将其打开并查看内部内容,或者尝试运行它并查看错误所在。如果您打开它并看到提及GCC,请回到2.2.1。MinGW步骤,但运行自定义脚本而不是make。
可能根本没有构建工具。如果遇到的只是一个文件.c或一个.cpp文件,那么它很简单,可以直接进行编译。同样,它们几乎都是MinGW,因此请下载该文件,启动MSYS Shell,导航至目录,然后根据需要调用gcc或调用它g++-例如gcc -o program.exe program.c
这些可能都不起作用。如果您在任何步骤都收到错误消息,则它们可能包含丢失消息的线索。一种可能是您缺少某些必需的框架或库-如果您愿意,可以尝试下载这些框架或库并将其添加到构建环境中,但这通常不是一个简单的过程,并且变化太多,因此没有覆盖答案的方法。
>>centos中编译错误解决办法集合.