cmake - CMake source_group 和生成的文件交互
问题描述
对于一个项目,我使用add_custom_command
. 据我所知,这会导致 CMake 创建一个GENERATED
源文件,我可以将其添加到库或可执行文件等目标中。但是,由于该文件在 CMake 编译时不存在,因此 CMake 无法使用该source_group
命令为 IDE (Visual Studio) 对这些生成的文件进行分组。
有没有另一种方法可以达到source_group
我找不到的相同结果?例如,当使用带有 Qt 的 CMake 时,您可以设置AUTOGEN_SOURCE_GROUP
更改 automoc 和 autorcc 生成文件的源组。
例子。
# Creates a command to generate the 'a.f90' file using 'mytool.exe' and 'a.f90.in'.
add_custom_command(
OUTPUT a.f90
COMMAND mytool.exe a.f90.in
DEPENDS a.f90.in
)
add_executable(example a.f90 b.f90 c.f90) # Where b.f90 and c.f90 are not generated
source_group("Source Files/Not Generated" FILES "b.f90 c.f90")
source_group("Source Files/Generated" FILES a.f90) # Does nothing
这会产生以下视觉工作室过滤器,
Source Files
|- Non Generated Files
|- b.f90
|- c.f90
|- a.f90
代替
Source Files
|- Non Generated Files
|- b.f90
|- c.f90
|- Generated Files
|- a.f90
解决方案
帮助其他可能正在尝试同样事情的人。这是我的解决方法。我找不到使用add_custom_command
. 这留下了一个可能的解决方案。如果您可以在编译代码时不自动生成文件,您可以改用该execute_process
命令。当execute_process
CMake 创建构建树而不是编译源代码时,将运行该命令。由于文件已经存在,因此可以将其添加为普通源文件,并且可以使用source_group
.
例子
# Generates 'a.f90'
execute_process(COMMAND mytool.exe a.f90.in ${CMAKE_CURRENT_BINARY_DIR}/a.f90)
add_executable(main "${CMAKE_CURRENT_BINARY_DIR}/a.f90" b.f90 c.f90)
source_group("Source Files/Not Generated" FILES "b.f90 c.f90")
source_group("Source Files/Generated" FILES a.f90)
有了这个,视觉工作室过滤器看起来像
Source Files
|- Generated
|- a.f90
|- Not Generated
|- b.f90
|- c.f90
推荐阅读
- cmake - CMake 版本设置:我是否想使用 CMAKE_CXX_STANDARD 或“CXX_STANDARD”在我的项目根目录“CMakeLists.txt”文件中设置“C++”版本?
- java - 如何通过 Java 中的多个类保存值?
- javascript - 为什么 vue 组件属性在第二次打开时不更新?
- android - 如何使用 Kotlin、Coroutines、ViewModel、LiveData 处理查询方法的返回类型房间
- formsflow.ai - 在表单流中以审阅者身份登录时找不到任何表单
- r - geom_col 图表未在 x 轴下方显示负值
- javascript - 如何阻止用户编辑 URL
- react-native - 如何反应原生重新渲染 Flatlist?
- c++ - 当擦除和 push_back 发生时如何正确擦除 reverse_iterator?
- python - 使用 Python 从浏览器选项卡获取当前 HTML