gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:12:10 27 4
gpt4 key购买 nike

我有一个 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 中配置它的最佳实践的任何建议,我们表示赞赏。

最佳答案

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

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

关于c - 构建 C 程序的最佳实践(用于 CMake 构建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524626/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com