已关闭。此问题为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}回到了根目录,并且源文件实际上没有编译。
谢谢
1条答案
按热度按时间xwbd5t1u1#
在学习了C++20和CMake最新的post的更好的支持后,我可以通过所有这些头文件/源文件的东西和简单的有(当然除了
project_root/cmake
、project_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.ixx
、restaurant-management-ixx
等构建的restaurant.ixx
模块。当然,在
project_root/app/modules/
中,你可以有一个包含其模块的餐厅文件夹,一个预订文件夹,一个personnel文件夹,并让它们中的每一个都包含其CXX_MODULES
文件。链接是通过定义目标来完成的,组成目标的文件,然后你可以让它们与app.cpp
“可执行文件”链接。这是在
project_root/app/
;如果你想在project_root/src/
中有一些更通用的函数,你可以在project_root/src/
中做同样的事情,这样你就可以在其他项目中重用它们--比如数据生成、流水线操作等等。PS:如果您只使用Visual Studio项目,那么IDE将为您做几乎所有的事情。
我还在努力记录我的文件夹/树,但我打算以某种方式使模板在Github上可用。