gpt4 book ai didi

CMake - 获取各种子项目的源/头文件列表

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:51 24 4
gpt4 key购买 nike

背景

我有一个很大的使用数十个子项目的项目:一些来自内部代码库,一些第三方项目也使用 CMake .

为了确保通用的编译器选项,我在 CMake 中设置了一个宏称为 CreateDevFlags仅在内部子项目中运行 CMakeLists文件作为要执行的第一行代码。这确保我不会破坏第三方项目的编译器标志、输出目录覆盖等,并且我自己编写的所有代码都是使用相同的选项构建的。

此外,每个子项目都有一个简单的代码块,如下所示,用于定义要编译的源文件:

file(GLOB subproject_1A_SRC
"src/*.c"
)

file(GLOB subproject_1A_INC
"inc/*.h"
)

file(GLOB subproject_2B_SRC
"src/*.c"
"extra_src/*.c"
)

file(GLOB subproject_2B_INC
"inc/*.h"
"extra_details_inc/*.h"
)

目标

我想向“master”添加完整性检查自定义规则/函数 CMakeLists项目根目录下的文件,该文件通过代码清理程序(检查换行符、强制执行样式规则等)运行内部子项目的所有代码。


问题

有没有一种简单的方法可以让所有“特殊”(即:内部)子项目将它们自己的源文件附加到源(.c)和 header (.h)文件(可能是通过我创建的宏)?我意识到我可以在 master CMakeLists 中手动创建这个列表文件,但这样我就会重复工作,并且代码维护人员必须在两个地方修改代码才能生效。

谢谢。

最佳答案

一种可能的实现方式是在项目的顶级范围内定义一个名为 FILE_TRACKER 的列表。然后,你可以做类似的事情

# Create local list to append to
set(LOCAL_LIST ${FILE_TRACKER})

# Append all of your source files, from your local source
foreach(SRC_FILE ${subproject_1A_SRC})
list(APPEND LOCAL_LIST ${SRC_FILE})
endforeach()

# Append to the upper macro (note: was initially set with FILE_TRACKER)
set(FILE_TRACKER ${LOCAL_LIST} PARENT_SCOPE)

开发人员只需将他们的源代码添加到一个列表中,顶层的宏将随文件更新。

关于CMake - 获取各种子项目的源/头文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029418/

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