如何管理不断增长的C ++项目

时间:2012-05-14 02:49:52

标签: c++ netbeans scons

我想知道如何管理不断增长的C ++项目。现在,我正在使用Netbeans开发一个项目,这是生成makefile的肮脏工作。该项目已经变得太大了,我决定将其分成几个部分。这样做的最佳方式是什么?

我正在尝试使用Scons作为我的构建系统。我已经取得了一些成功,但是每次添加或删除文件时都应该编辑构建脚本。太沉闷了。

所以我需要你的建议。

P.S。顺便说一句,谷歌Chrome这样的大型项目如何做到这一点?是否每个人都使用某种IDE来构建仅为软件分发生成的脚本?

3 个答案:

答案 0 :(得分:4)

大多数大型项目都坚持使用构建系统来自动处理所有混乱的细节。我是CMake的忠实粉丝(这是KDE用于所有组件的东西),但scons是另一个受欢迎的选择。我的编辑器(KDevelop)应该自己处理CMake项目,但我仍然自己编辑构建脚本,因为它并不那么难。

我建议学习一个工具并且坚持使用它(对于您感兴趣的任何工具,都有大量文档可用)。如果你还没有(我对git有一个情有独钟,但Mercurial和Subversion也是非常受欢迎的选择),请确保你也看看版本控制。


一个简单的CMake示例:

project("My Awesome Project" CXX)
cmake_minimum_required(VERSION 2.8)
add_library(foo SHARED a.cpp b.cpp c.cpp) #we'll build an so file
add_executable(bar bar.cpp)
target_link_libraries(bar foo) #link bar to foo

这显然是一个微不足道的案例,但根据需要管理和扩展非常容易。

答案 1 :(得分:4)

我还使用Netbeans for C ++并使用SCons进行编译。我使用的jVi Netbeans插件非常适用。

出于某种原因,Netbeans Python插件不再是官方的,我根本不懂。你仍然可以得到它,它确实使编辑SCons构建脚本成为一种很好的体验。尽管Netbeans没有SCons插件(但是?),你仍然可以配置它的构建命令来执行SCons。

至于IDE自动维护SCons脚本,我也不这样做,我手工完成。但它不像我每天必须处理这个,所以我不认为它那么重要,特别是考虑到脚本的阅读是多么容易。

这是SCons中的构建脚本,它与前面提到的CMake一样:

env = Environment()
env.EnsurePythonVersion(2, 5)
env.EnsureSConsVersion(2, 1)

libTarget = env.SharedLibrary(target = 'foo', source = ['a.cpp', 'b.cpp', 'c.pp'])
env.Program(target = 'bar', source = ['bar.cpp', libTarget])

SCons Glob()函数是个不错的选项,但我倾向于回避自动构建目录中的所有文件。列出要构建的子目录也是如此。我被烧了足够多次,并且更喜欢明确指定要构建的文件/目录。

如果您听到SCons比其他选择更慢的传闻,SCons GoFastButton有一些可以提供帮助的指示。

答案 2 :(得分:2)

  

我正在尝试使用Scons作为构建系统。我有一些成功,但我应该编辑   每次添加或删除文件时都会构建脚本。太沉闷了。

根据文件的组织方式,您可以使用Scon的Glob()函数将源文件作为列表获取,而无需单独列出所有文件。例如,要将所有c ++源文件构建为可执行文件,您可以执行以下操作:

 Program('program', Glob('*.cpp'))

您可以使用其命令在CMake中执行相同操作。

而且,如果您正在使用SCons,因为它是Python,您可以编写任意Python代码来制作源文件列表。

您还可以将文件组织到多个文件夹中,并使用主构建脚本可以调用的辅助SCons(或CMakeList.txt)构建文件。