在Linux下使用C ++时,有人可以提出一些组织源文件和管理构建的好方法。我使用CMake来管理我的构建,虽然我现在不使用复杂的构造。 我们假设我们有以下三种情况 1.对于makefile应用程序,只需从简单的.cpp和.h文件中构建一些可执行文件 2.用于创建使用其他流行共享库的静态/共享库 例如,OpenCV和OpenGL 3.更复杂的类型,例如,让我们说我们需要创建一个可执行文件 源文件使用OpenCV等外部库以及我们的自定义静态库 已经建立了自己(例如,一个自定义的静态库,其中包含我们相关的标题 用上面的step2构建)。
我相信很多人都在复杂的库项目上工作,而构建过程并不那么简单。我真的很期待开源爱好者和黑客为开源项目做出贡献的惊人答案。你们是如何组织源代码的?
答案 0 :(得分:4)
由于您正在使用CMake,我建议使用源代码构建(完全在项目根目录的外部或build
子目录中)当同时使用多个配置和/或编译器时可以为每个目录创建一个单独的构建目录。
在项目根目录的CMakeLists.txt
中,我设置了CMakeLists.txt
子目录中所有src
文件使用的内容。我将可执行文件和库的所有源代码放在src
子目录中,通常我将src
中自己的子目录中构成单个库或可执行文件的源与一个随附的CMakeLists.txt
组合在一起。它描述了如何构建它。我通常不会从源中分离包含文件。
我在项目根目录中也有一个cmake
子目录,其中我将特定于CMake的文件放入查找模块,在我的例子中是一个特殊的cmake模块,它修复了Eclipse IDE自动发现的路径。
|--cmake
| |
| |--FindXXX.cmake
|
|--src
| |
| |--projectABC
| | |
| | |--CMakeLists.txt
| |
| |--library1
| | |
| | |--CMakeLists.txt
| |
| |--library2
| |
| |--CMakeLists.txt
|
|--CMakeLists.txt
|
|--build-release
|--build-debug
|--build-msvc-release
|--[...]
答案 1 :(得分:0)
我建议按主题组织源并具有单独的二进制(或对象)目录。头文件和源文件在同一目录中。每个不同编译器或平台的一个目录:
Fields
|-- src
| field_int.hpp
| field_int.cpp
|
|-- obj_linux_gcc
| |
| |-- debug
| |
| |-- release
|
|-- obj_windows_gcc
|
|-- obj_visual_studio
近年来,在各个商店,我发现将标题和源文件分成不同主题的单独目录是一件很难维护的事情,也需要很长时间才能熟悉。
“这只是我的意见,我可能是错的。” - 喜剧演员丹尼斯米勒。