构建C程序的最佳实践(用于CMake构建)

时间:2012-07-17 14:24:47

标签: c cmake directory-structure

我有一个由离开的开发人员传给我的C程序。我正在努力弄清楚他究竟在做什么,并将软件重新安排成更符合逻辑的东西,这样我就可以更轻松地构建它。我正在使用CMake构建,而他正在使用Make。

有一个src /文件夹中有几个源文件,其中有4个有main()方法。具有main()方法的文件位于更多名称的文件中,就好像它们是实用程序,工具或其他任何东西一样。这种方式让我感到很奇怪,因为他还有一个lib文件夹,其中包含一些其他内容,它们看起来更像是库。我应该将这些主要方法拆分为“驱动程序”源文件,并将这些文件中定义的方法作为其他库吗?如果我这样做,我知道如何让CMake去寻找一个库并构建并链接到驱动程序以便执行。

如果构建那些“库”源文件是可以接受的,那么在src文件夹中,我应该只设置CMake来一次构建该文件夹中的所有内容,还是应该至少创建一个目录结构一些逻辑分离?

就像一个想法,这是当前的目录结构

project
.../src
......file1.c
......file2.c <-has a main() as well as other methods
......file3.c
......file4.c <- has a main() as well as other methods
......file5.c
.../lib
....../lib1
........./file1.c <-references top level include folder files
........./file2.c
....../lib2
........./file1.c <-refs top level and local include files
........./file2.c
........./file2.h
.../scripts
.../include
.
.
.

有关重构此构建或在CMake中进行配置的最佳实践的任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:4)

答案永远不会太迟,所以我建议:

project
.../CMakeLists.txt
     include_directories(include/)
     add_subdirectory(lib/lib1)
     add_subdirectory(lib/lib2)
     add_subdirectory(src/)  

.../lib/lib1/CMakeLists.txt
              add_library(lib1 file1.c file2.c)

.../src/CMakeLists.txt
         add_executable(test1 test1.c test2.c)
         target_link_libraries(test1 lib1)

为什么它可以工作:include_directories在子目录中派生,add_subdirectory的所有目标(以及库)都在整个项目中导出。