5

考虑以下:

SET(TEST_DIR, "test")
INSTALL(PROGRAMS scripts/foo.py DESTINATION ${TEST_DIR})
INSTALL(PROGRAMS scripts/foo.py DESTINATION @TEST_DIR@)

第一个INSTALL命令不起作用。第二个可以。这是为什么?这两者有什么区别?@@除了在创建配置文件的上下文中,我没有找到任何关于扩展的参考。其他一切都只使用${}扩展。

更新:好的,上面有明显的错误。我的SET()命令有一个多余的逗号。删除它,使其看起来像:

    SET(TEST_DIR "test")

结果@@${}扩展工作。@@仍然想知道(a)相对于的含义是什么${},以及为什么只有前者与我的错误SET()陈述一起使用。

4

2 回答 2

5

根据configure_file()配置文件时命令的文档,${VAR}表单和@VAR@表单都将替换 VAR 的值。根据您的上述经验和我所做的一些测试,当 CMake 评估您的CMakeLists.txt. 由于这没有记录,我建议不要@VAR@在你的CMakeLists.txt

请注意,使用时,configure_file()您可以通过使用参数将替换限制为仅@VAR@表单@ONLY

于 2013-04-21T04:24:30.587 回答
1

据我所知,@VAR@ 语法仅在用configure_file命令替换变量时使用。

请注意,该configure_file命令允许一个额外的选项@ONLY。使用它,您可以指定仅替换 @VAR@,但保留 ${VAR}。

例如,在生成例如稍后将再次与 CMake 一起使用的 cmake 文件时,这可能很有用。例如,在构建项目时,@VAR@ 将在使用 configure_file 时被替换。在您分发项目并且其他人使用生成的 UseProject.cmake 文件后,将替换 ${VAR}$ 条目。

于 2013-04-21T10:32:03.993 回答