请考虑以下事项:
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()
声明。
答案 0 :(得分:5)
根据配置文件时configure_file()
命令的文档,${VAR}
表单和@VAR@
表单都将替换VAR的值。根据您的上述经验和一些测试,当CMake评估您的CMakeLists.txt
时,我会替换这两个表单。由于没有记录,我建议不要使用@VAR@
CMakeLists.txt
请注意,使用configure_file()
时,您可以使用@VAR@
参数将替换限制为仅@ONLY
表单。
答案 1 :(得分:1)
据我所知,@ VAR @语法仅在使用configure_file命令替换变量时使用。
请注意,configure_file
命令允许使用额外选项@ONLY
。使用它你可以指定只替换@ VAR @,但保留$ {VAR}。
例如,这可以在生成例如一个cmake文件,稍后再与CMake一起使用。例如。在构建项目时,使用configure_file时将替换@ VAR @。分发项目后,其他人使用生成的UseProject.cmake文件,$ {VAR} $条目将被替换。