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

时间:2013-04-20 23:16:39

标签: variables cmake expansion

请考虑以下事项:

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()声明。

2 个答案:

答案 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} $条目将被替换。