编译器:GCC 4.6+(windows:mingw)或llvm+clang
调试器:GDB
源码组织:文件目录
源码管理:cmake(makefile)
格式化:astyle
静态检查:cppcheck
动态检测:valgrind(windows没有找到支持的版本,可以使用windbg代替吧,不过功能差很多)
IDE:eclipse(QtCreator、codelite、codeblocks...)
Editor:vim、emacs(相关配置参考http://blog.csdn.net/cnsword/article/details/7309167)
辅助工具:ctags,cscope
文档:doxygen
这些工具都有相应的windows和linux版本且都是开源的。
llvm是apple为替代gcc而发起的项目,他能够使用gcc作为前端,clang能够替代gcc作为llvm前端,与llvm结合。更好的智能化分析支持,兼容gcc。如果unix版本趋向于为bsd系考虑采用clang编译。
由于很多IDE都是支持makefile的(VS似乎不支持),所以大家喜欢使用什么用什么IDE就用什么IDE吧,不过不要将自己的项目文件提交到仓库。不过linux上开发更多的使用edit,而edit一般会从vim和emacs来选。
cmake和autotools都是生成makefile的辅助工具,如果项目规模不大,就直接手工编写makefile吧,根据我们项目的规模和跨平台特性选择cmake是更好的。而autotools在类unix系统上使用量是最大的,不过cmake也在不断扩展使用范围。
开发环境配置的重点是cmake的CMakeLists.txt文件的编写,而eclipse或其他IDE环境只提供编辑功能和辅助入口。
在linux和windows上面配置工具链的步骤是不同的,linux更简单。如果不修改prefix的值安装相应工具后不需要配置就可以工作了。而windows下需要将bin目录添加到相应的PATH变量中。构建工具链是指的的完成构建所需要的工具的集合,这些集合一般是包括了编译器、调试器、make等。
以archlinux为例,其他主流版本参考第五节的相关内容,非主流版本请自己查阅相关资料。
pacman -S gcc
pacman -S g++
pacman -S cmake
pacman -S gdb
安装后工具链就能工作了,可以在shell中进行测试:
g++ --veresion
cmake --version
gdb --version
windows的gcc构建工具链有mingw和cygwin两种,而以方便性来说还是mingw更方便,但是cygwin提供了全套的linux的模拟。我们选用mingw来作为工具链,而mingw的官方版本对gcc的支持比较滞后,所以选择TDM-MinGW来作为工具链。
将tdm-mingw的bin目录添加到PATH中。tdm-mingw包括了主要的gcc编译器和gdb调试器。
复制mingw32-make.exe为make.exe(或者建立链接也可以)。
如果编译时出现下图的错误,是因为官方生成Qt的动态库版本与我们的版本有差异造成的,重新编译一下qt就可以,confugure;mingw32-make。
添加cmake的bin目录到PATH中。
mingw版本的Qt和VS版本的Qt不能通用,如果cmake无法正确定位到Qt,请修改或添加QTDIR环境变量为mingw的版本。
eclipse是一个java开发环境,开发C++需要CDT插件支持,不过官方提供了默认C++开发的版本,不需要手工配置。
安装jre就可以,我们为了开发方便安装JDK。linux上直接从源里安装openjdk就可以。安装后因为我们不进行java开发就不需要进行配置JAVA_HOME、CLASSPATH等环境变量了。
windows下直接使用CDT版就可以,linux下载autotools版本他提供更多的构建工具。eclipse直接解压到相应的目录就可以。eclipse默认利用内存不会很高,性能不能发挥,可以根据自己机器配置可以对eclipse进行一下调优,修改安装目录下的eclipse.ini文件,这是非堆内存:
这里是堆内存:
根据你机器的内存可以进行调整,如果4G的内存调整到2048M就可以。如果不能启动可以调的低一些。
主要的开发功能插件已经默认安装好了,不过我们可以安装一些辅助的功能插件,一般的插件我们都能够通过Eclipse Marketplace来获取而不需要单独安装。
选择help-Eclipse Marketplace搜索svn,就会出现svn相关插件,找到Subversive-SVN Team Provider点击install就会自动安装。
重启后,会提示安装kit工具包,根据自己机器上的svn版本不同选择不同的版本。
选择help-Eclipse Marketplace搜索cmake,会发现cmake editor没有install按钮。这是因为这个项目的维护滞后,没有提供相应版本的支持。所以我们只能去官网下载或者寻找替代
方案。
点击learn more进入项目页面,可以找到他的update链接地址。选择help install new software,将http://cmakeed.sourceforge.net/eclipse/填到workwith中。你也可以点添加,添加到自动更新列表中。
选中需要的安装包,点击next,
选择接受协议,点击finish进行安装。安装cmake editor后的语法高亮:
如果你需要的插件很不幸不支持在线更新方式的安装,下载压缩包并解压到eclipse的dropins目录就可以,当然你如果想以后卸载可以直接解压的eclipse的根目录。
Qt for eclipse插件版本太低了,不建议使用,下载地址是ftp://ftp.qt.nokia.com/qteclipse/。
建立C++项目或者导入现有项目,选择File-New-C++ Project,在对话框中选择Makefile project下的Empty Project,在Toolchains中windows选择Mingw GCC、Linux选择Gnu GC
C
导入项目选择存在的makefile项目,选择File-Import...,在对话框中选择Windows选MinGW GCC、linux选Gnu GCC
注意windows下修改编码方式为utf-8,linux默认为utf-8,在项目文件夹上点击右键选择Properties,选择Resouce节点,修改Text file encoding为utf-8:
修改构建工具链windows为mingw,linux为gcc,在Properties中选择C/C++build节点下的Tool Chain Editor,修改Current toolchina为需要的工具链,CDT的构建功能不敢恭维所以修改current builder为Gnu Make Builder
将Qt include目录添加到系统搜索路径,添加Qt的library到link目录,include的添加主要是为编辑器补全来使用,library的添加不是必须的,编译过程的所以依赖都是通过makefile来控制与IDE无关。在Properties中选择C/C++ General下的Path and Symbols节点,选择Include选项卡,选中Gnu C++,点击Add,将需要添加的include的目录添加到eclipse的搜索路径下。选择Library Path选项卡,点击Add,添加需要的library目录,选择Library选项卡,点击Add,添加需要链接的library,这两步在不使用eclipse自身的构建时是无效的,所以这两步的设置不是必须的。
eclipse在添加include目录后能自动识别h,hpp等扩展名的头文件,但是没有扩展名的文件不能自动识别的,需要手动添加。将Qt中没有扩展名的文件名依次添加到eclipse文件类型识别中。选择C/C++ General下的File Types,选择 Use project settings,点击New,将需要补全和检测的文件名填写到对话框中。
对需要Qt专门工具进行编辑的文件需要关联外部编辑器,修改ui文件默认打开方式为Qt Designer。在ui文件上点击右键选择open with,选择other...,弹出Editor Selection对话框,选择External programs,点击Browse... 选择Qt Designer应用程序。
cmake使用来替代gnu auto tools的。和autotools都会生成makefile。另外,cmake能够生成vs、eclipse、XCode等的工程文件,但是一般不会去使用他们。具体cmake和automake的差异可以查看我blog中的文章http://blog.csdn.net/cnsword/article/details/7542696。如果需要更加精确的去控制编译,了解makefile语法是必要的。
CMake脚本的编写是整个开发环境的核心部分,他控制了整个编译过程。详细语法规则请参阅官方文档或CMake最佳实践.pdf
在每个需要生成target模块的文件夹中和项目根目录中都有一个CMakeLists.txt文件,我们会在makes文件夹中提供一些辅助的功能脚本,具体内容请参见具体文件,根据现在的脚本支持,一般情况只有修改文件夹时才会需要对相关的CMakeLists.txt进行修改。下面是一个最简单的CMakeLists.txt文件实例:
顶层文件
project(projectname)
cmake_minimum_required(VERSION 2.8)
set(PRO_DIR ${PROJECT_SOURCE_DIR})
set(LIBRARY_OUTPUT_PATH ${PRO_DIR}/lib/)
set(EXECUTABLE_OUTPUT_PATH ${PRO_DIR}/bin/)
include_directories(${PRO_DIR}/include)
add_subdirectory(src)
源码目录:
find_library(pla platform http://www.cnblogs.com/../lib/fep)
find_package(Qt4)
include(${QT_USE_FILE})
add_executable(test test.cpp TestMain.cpp BaseTest.cpp)
#add_library(testl shared test.cpp)#动态库
target_link_libraries(test ${QT_LIBRARIES} ${pla})
cmake对Qt的moc支持是通过qt4_wrap_ui qt4_wrap_cpp qt4_add_resources来支持的。注意对Qt4和Qt5的支持是不同的。对Qt5的支持更加精细,具体到细分的模块。
根据项目,需要编写顶层构建文件、分模块构建文件以及辅助的模块查找文件。
直接使用cmake在终端中直接使用命令来完成。一般情况下在linux下会采用这种方法来生成makefile文件构建,与直接手工编写makefile相比能够提供构建过程的语法高亮的支持,确保更快的定位错误。
生成makefile(windows) cmake . -G “MinGW Makefiles”
生成makefile(unix) cmake . [-G “Unix Makefiles”]
生成eclipse cdt(windows)配置 cmake . -G “Eclipse CDT4 - MinGW Makefiles”
生成eclipse cdt(unix)配置 cmake . -G “Eclipse CDT4 - Unix Makefiles”
生成vs项目cmake . -G “Visual Studio 11”
在build目录中windows执行 cmake .. -G “MinGW Makefiles”,linux直接执行cmake ..,下图是windows执行成功的结果:
这里我们只使用makefile文件。不需要eclipse的项目配置文件。
编译make all,下图是在windows下使用mingw32-make来构建的结果。
清理make clean
在Make target建立步骤:
选择Make Target选项
卡
添加标签 cmake,在选项卡的目录上点击右键,选择New弹出对话框,按照下图修改。取消Same as the target name选项,清空Make target中的内容,取消Use builder settings选项,在Build command中填写cmake -G “MinGW Makefiles”
添加标签 all,步骤同上,但是选项内容直接为默认值就可以
。
双击Make Target选项卡中的target就会执行相应的构建操作。
QtCreator已经提供了对cmake的支持,直接使用Qt Creator打开CMakeLists.txt文件
选择工具链(windows:mingw,linux:makefiles)
点击执行cmake,可以直接使用系统构建按钮进行构建。在程序中编辑CMakeLists.txt会提示重新构建。
在应用中会根据平台提供build.bat或build.sh来作为构建的入口,给构建服务器来使用。另外,可以在这些脚本中添加统一的检测和格式化脚本来确保文件格式的统一和进行静态检测。
eclipse提供了很好的相关调试和检测工具的环境支持,QtCreator的调试功能比较弱,如果有能力建议直接使用gdb直接调试,使用cppcheck进行静态分析,使用valgrind进行动态分析。