c++ Cmake cmakelist多文件夹的良好实践(使用cpp)[已关闭]

fnvucqvd  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(192)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

昨天关门了。
Improve this question
对于包含许多文件夹(这些文件夹彼此依赖)的项目,什么是好的做法?
例如

root/folder_A/src/a.cpp
root/folder_A/Hdr/a.h
root/folder_B/src/b.cpp
root/folder_B/Hdr/b.h
root/folder_C/src/c.cpp
root/folder_C/Hdr/c.h

为my_library创建CMakelist的最佳做法是什么(它应该包含A、B和C)?

我目前的解决方案是在每个文件夹(A B C)中创建包含以下内容的cmakelist

set(A_src a.cpp PARENT_SCOPE)
set(A_path path/to/hdr/of/A PARENT_SCOPE)

在my_library(根文件夹)中,我使用add_subdirectories()

add_subdirectories(A)
add_subdirectories(B)
add_subdirectories(C)

add_library(my_library STATIC
${A_src}
${B_src}
${C_src}
)

target_include_diretories(my_library  PUBLIC
${A_path}
${B_path}
${C_path}
)

我的解决方案好吗?2我试着用“include()”代替add_subdirectories(),但是${A_path}回到了根目录,并且源文件实际上没有编译。
谢谢

xwbd5t1u

xwbd5t1u1#

在学习了C++20和CMake最新的post的更好的支持后,我可以通过所有这些头文件/源文件的东西和简单的有(当然除了project_root/cmakeproject_root/external等),我的project_root/app用于应用程序,project_root/src用于库,模块化-在project_root/app/中,我有一个,比如说,app.cpp,一个CMakeLists.txt和一个project_root/app/modules/目录,其中包含.ixx文件(模块也可以使用.cpp、.cppm,这没关系。我使用.ixx是因为Microsoft的编译器提供了更好的支持)。
这些.ixx可以是独立的模块,也可以是构建一个模块的多个子模块。由分区restaurant-kitchen.ixxrestaurant-management-ixx等构建的restaurant.ixx模块。
当然,在project_root/app/modules/中,你可以有一个包含其模块的餐厅文件夹,一个预订文件夹,一个personnel文件夹,并让它们中的每一个都包含其CXX_MODULES文件。链接是通过定义目标来完成的,组成目标的文件,然后你可以让它们与app.cpp“可执行文件”链接。
这是在project_root/app/;如果你想在project_root/src/中有一些更通用的函数,你可以在project_root/src/中做同样的事情,这样你就可以在其他项目中重用它们--比如数据生成、流水线操作等等。

  • CMaking模块 * 仍然是实验性的,但是学习如何使用CMake是值得的,至少在C/C++世界里是这样。

PS:如果您只使用Visual Studio项目,那么IDE将为您做几乎所有的事情。
我还在努力记录我的文件夹/树,但我打算以某种方式使模板在Github上可用。

相关问题