【问题标题】:Best practices for structuring a C program (for CMake build)构建 C 程序的最佳实践(用于 CMake 构建)
【发布时间】:2012-07-17 14:24:47
【问题描述】:

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

【问题讨论】:

    标签: c cmake directory-structure


    【解决方案1】:

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

    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 的所有目标(以及库)都在整个项目中导出。

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 2020-11-14
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多