我想知道我应该如何管理一个不断增长的 C++ 项目。现在,我正在使用 Netbeans 开发一个项目,生成 makefile 是一项繁琐的工作。这个项目太大了,我决定把它分成几个部分。这样做的最佳方法是什么?
我正在尝试使用 Scons 作为我的构建系统。我已经取得了一些成功,但我是否应该在每次追加或删除文件时编辑构建脚本。它太沉闷了。
所以我需要你的建议。
PS对了,google chrome这样的大项目是怎么做到的呢?是否每个人都使用某种 IDE 来构建仅为软件分发而生成的脚本?
我还将 Netbeans 用于 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有一些可以提供帮助的指针。
大多数大型项目都坚持使用自动为它们处理所有混乱细节的构建系统。我是 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
这显然是一个微不足道的案例,但是很容易根据需要进行管理和扩展。
我正在尝试使用 Scons 作为构建系统。我在这方面取得了一些成功,但每次追加或删除文件时我都应该编辑构建脚本。它太沉闷了。
根据文件的组织方式,您可以使用例如 Scon 的Glob()
功能将源文件作为列表获取,而不必单独列出所有文件。例如,要将所有 c++ 源文件构建为可执行文件,您可以执行以下操作:
Program('program', Glob('*.cpp'))
你可以在 CMake 中使用它的命令来做同样的事情。
而且,如果你使用 SCons,因为它是 Python,你可以编写任意 Python 代码来制作你的源文件列表。
您还可以将文件组织到多个文件夹中,并拥有主构建脚本可以调用的辅助 SCons(或 CMakeList.txt)构建文件。