Visual studio 如何让CMake创建仅包含配置文件的Visual Studio项目?

Visual studio 如何让CMake创建仅包含配置文件的Visual Studio项目?,visual-studio,cmake,Visual Studio,Cmake,我们正在使用CMake为VisualStudio2008生成解决方案文件。除了构建库和可执行文件的常规源项目外,我还希望有一个只包含配置文件的项目。这些文件用于在运行时配置项目的行为。构建项目不需要它们,但将它们包含在解决方案中可以方便地编辑这些文件。我可以使用add\u custom\u target完成这项工作,如下所示: file(GLOB ini_files ${PROJECT_SOURCE_DIR}/../config/ini/*) source_group(ini FILES ${i

我们正在使用CMake为VisualStudio2008生成解决方案文件。除了构建库和可执行文件的常规源项目外,我还希望有一个只包含配置文件的项目。这些文件用于在运行时配置项目的行为。构建项目不需要它们,但将它们包含在解决方案中可以方便地编辑这些文件。我可以使用
add\u custom\u target
完成这项工作,如下所示:

file(GLOB ini_files ${PROJECT_SOURCE_DIR}/../config/ini/*)
source_group(ini FILES ${ini_files})
file(GLOB xml_files ${PROJECT_SOURCE_DIR}/../config/xml/*)
source_group(xml FILES ${xml_files})
add_custom_target(config SOURCES ${ini_files} ${xml_files})
这给了我一个“配置”项目,其中包含作为子文件夹的配置文件。但是,还有一个名为“config”的链接指向某个不存在的文件。我假设这应该是指向此规则创建的目标的链接。由于没有什么可建的,这将仍然是一个死链接。现在我的问题是:

  • 添加自定义目标是实现我想要的目标的正确方法吗? 如果不是,那么有什么更好的解决方案
  • 如果这是正确的方法,我如何才能摆脱目标名称的链接?另外,我想删除“CMake规则”文件夹,以使配置项目尽可能干净

  • VisualStudio项目基本上是根据一组源文件构建目标的

    不建议使用仅列出一组静态文件的项目,因为一旦添加自定义目标,CMake将盲目尝试为项目创建输出,以便与其他后端系统保持兼容。 试想一下,如果CMake创建了一个没有实际目标的Unix Makefile,那么它根本就不是Makefile,是吗

    正确的方法是将文件实际添加到另一个现有项目中。从技术上讲,如果您正在构建一个可执行文件,并且该可执行文件在运行时读取配置文件,那么这些文件就是项目的一部分

    此外,我不建议使用文件全局搜索来列出源文件或配置文件,因为如果在文件夹中添加文件,CMake将无法知道已添加新文件,并且Visual Studio项目将不会重新生成以包含这些文件。相反,您应该列出CMakeLists.txt文件中的每个文件,以便在其中添加新文件将触发cmake文件的重新生成


    最后一点,如果您真的需要“干净”的项目,那么CMake不是您需要的工具,因为它生成的所有内容都有助于维护连贯的构建过程。

    感谢您提供了这一富有洞察力的答案。将文件添加到我自己想到的现有项目中;但问题是,项目实际上构建了模块(动态库、dll或其他文件),这些模块由项目外部的框架使用。因此,也许有人会把配置文件放到它们所属的模块中;不过,有些是由多个用户使用的。还有一些文件将框架配置为使用模块,因此不会被任何模块读取。我知道,对于Unix Makefiles来说,这是没有用的,但是这个项目的唯一目的是将配置文件添加到VS.@ahans中。没有任何东西可以阻止您在多个项目中包含文件。开销是最小的,因为没有文件会被复制。有趣的一点。这并不能解决配置框架的文件问题。我一定会记住这一点,也许在某个时候会派上用场。现在我通过使用
    add_library
    解决了这个问题;这正是我想要的。