0

我们正在使用 CMake 为 Visual Studio 2008 生成解决方案文件。除了构建库和可执行文件的常规源项目之外,我还想要一个仅包含配置文件的项目。这些文件用于在运行时配置项目的行为。构建项目不需要它们,但是将它们包含在解决方案中可以方便地编辑这些文件。我能够使用add_custom_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”的链接指向一些不存在的文件。我认为这应该是该规则创建的目标的链接。由于没有任何东西要构建,这将仍然是一个死链接。现在我的问题是:

  1. add_custom_target 是完成我想要的正确方法吗?如果没有,有什么更好的解决方案?
  2. 如果是正确的方法,我怎样才能摆脱目标名称的链接?另外,我想删除“CMake Rules”文件夹以使配置项目尽可能干净。
4

1 回答 1

2

Visual Studio 项目本质上是根据一组源文件构建目标。

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

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

另外,我不推荐使用file globing来列出源文件或配置文件,因为如果你在文件夹中添加文件,CMake将无法知道新文件已经添加,并且不会重新生成Visual Studio项目包括这些文件。相反,您应该列出 CMakeLists.txt 文件中的每个文件,以便在其中添加新文件将触发 cmake 文件重新生成。

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

于 2012-05-15T08:30:14.233 回答