摆脱CMake Rules文件夹

时间:2016-11-29 21:29:14

标签: visual-studio cmake

有没有办法摆脱Visual Studio中目标中的CMake Rules文件夹?

solution explorer

在这种情况下,game目标使用cotire进行预编译头支持,omg目标有一个自定义命令,用于解析.mix文件并输出{{1文件。

也可以从那里删除..._gen.h文件吗?我知道这是为了方便,但在我的工作流程中它并没有那么有用。

编辑:开始了第二次赏金,因为我真的需要这个 - 这些“CMake Rules”文件夹让我的解决方案资源管理器膨胀,因为我有100多个项目都拥有它们!

我会接受任何东西 - 一种CMake方式,一种VS方式(一些“解决方案浏览器视图”或宏或其他)...

编辑2:

这里是CMakeLists.txt目标的cmake的排序:

omg

所以add_library(omg SHARED D:/omg.cpp D:/omg.mix) add_custom_command(OUTPUT D:/omg_gen.h MAIN_DEPENDENCY D:/omg.mix COMMAND python D:/mixify.py D:/omg.mix D:/omg_gen.h) add_custom_target(${target}_gen_${mix_name_only} DEPENDS ${gen_header}) add_dependencies(omg omg_gen) target_sources(omg PUBLIC D:/omg_gen.h) omg_gen.h生成,然后包含在omg.mix

1 个答案:

答案 0 :(得分:2)

CMake需要.rule个文件将自定义命令附加到某些" dummy"如果没有给出输入文件,则自生成文件。当您查看相关Visual Studio项目的.rule文件属性时,可以看到这一点(请参阅Custom Build Tool/General/Command Line)。

如果您没有更改包含这些目标的CMake脚本代码,则无法将其删除。

您只能将它们移动到项目的根源文件夹或您指定的任何其他文件夹中。

我已成功测试了以下示例:

cmake_minimum_required(VERSION 2.8)
project(NoRulesSourceGroup NONE)

# Overwrite the rule for "CMake Rules" with do-not-match-anything (-> root)
source_group("CMake Rules" REGULAR_EXPRESSION "^$")

# Move ".rule" files somewhere else
source_group("Some Other Source Group" REGULAR_EXPRESSION "\\.rule$")

add_custom_target(
    ${PROJECT_NAME}
    COMMAND ${CMAKE_COMMAND} -E echo "Hello World"
)

修改:您还可以将上述正则表达式与CMakeLists.txt的匹配项结合使用:

source_group("Some Other Source Group" REGULAR_EXPRESSION "CMakeLists\\.txt|\\.rule$")

修改:如果您可以修改您的CMake脚本代码,则应添加到add_custom_command()来电:

MAIN_DEPENDENCY
     

为命令指定主输入源文件。这被视为与DEPENDS选项的任何值一样,但也建议Visual Studio生成器挂起自定义命令。最多一个自定义命令可以将给定的源文件指定为其主要依赖项。

在您的情况下,您甚至不需要额外的自定义目标,因为您通过头文件具有依赖关系。我已经成功测试了以下问题的例子:

file(WRITE omg.cpp "")
file(WRITE omg.mix "")

add_library(omg SHARED omg.cpp omg.mix)
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/omg_gen.h 
    MAIN_DEPENDENCY omg.mix 
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/omg.mix ${CMAKE_CURRENT_BINARY_DIR}/omg_gen.h
)
target_sources(omg PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/omg_gen.h)

<强>参考