使用"@"与"$ {}"进行CMake变量扩展

Jee*_*eet 5 variables cmake expansion

考虑以下:

SET(TEST_DIR, "test")
INSTALL(PROGRAMS scripts/foo.py DESTINATION ${TEST_DIR})
INSTALL(PROGRAMS scripts/foo.py DESTINATION @TEST_DIR@)
Run Code Online (Sandbox Code Playgroud)

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

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

    SET(TEST_DIR "test")
Run Code Online (Sandbox Code Playgroud)

导致两者@@${}扩展工作.仍然想知道(a)@@相反的含义是什么${},以及为什么只有前者与我的错误SET()陈述一起工作.

j3l*_*amp 5

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

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