3

我有一个 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 中配置它的最佳实践的建议都值得赞赏。

4

1 回答 1

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都在整个项目中导出。

于 2012-10-10T10:45:01.483 回答