我们正在使用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”的链接。我认为这应该是该规则创建的目标的链接。由于没有什么可以建造,这将仍然是一个死链接。现在我的问题是:
答案 0 :(得分:2)
Visual Studio项目主要用于根据一组源文件构建目标。
不推荐使用仅列出一组静态文件的项目,因为只要添加自定义目标,CMake就会盲目地尝试为项目创建输出,以便与其他后端保持兼容系统。 试想一下,如果CMake创建了一个没有实际目标的Unix Makefile,那根本就不是Makefile,不是吗?
执行此操作的正确方法是将文件实际添加到另一个现有项目中。从技术上讲,如果您正在构建可执行文件,并且此可执行文件在运行时读取配置文件,则这些文件合法地是项目的一部分。
此外,我不建议使用文件全局列出源文件或配置文件,因为如果您在文件夹中添加文件,CMake将无法知道已添加新文件,并且Visual Studio项目将不能重新生成包含这些文件。相反,您应该列出CMakeLists.txt文件中的每个文件,以便在那里添加新文件将触发cmake文件重新生成。
最后一点,如果你真的需要“干净”项目,那么CMake不是你需要的工具,因为它生成的所有内容对于维护一致的构建过程很有用。