CMake和configure_file:如果我只需要$ ONLY而不是@ONLY怎么办?

时间:2017-07-26 08:39:13

标签: cmake

configure_file的{​​{3}}起,它有一个有用的@ONLY参数用于:

  

将变量替换限制为@VAR@形式的引用。这对于配置使用${VAR}语法的脚本非常有用。

到目前为止一切顺利。

现在我的情况是,我的文件同时包含@FOO@${BAR},并且我希望将S{BAR}替换为来自的变量CMakeLists.tx我的configure_file。另一方面,我不希望@FOO@尝试替换$ONLY 换句话说,我需要类似于@ONLY参数的内容,其作用为@,但对于相反的情况。

我现在有什么机会可以做到这一点吗? 我尝试在我的\@前面添加反斜杠,但这样我获得了一个包含几个public class YourResponse { @SerializedName("status") public String status; @SerializedName("source") public String source; @SerializedName("sortBy") public String sortBy; @SerializedName("articles") public List<Articles> articles; public static class Articles { @SerializedName("author") public String author; @SerializedName("title") public String title; @SerializedName("description") public String description; @SerializedName("url") public String url; @SerializedName("urlToImage") public String urlToImage; @SerializedName("publishedAt") public String publishedAt; } } 的文件,这不是我需要的。

1 个答案:

答案 0 :(得分:3)

至少我找到了一个有效的解决方案,即使我不确定这是最好的方法 如果没有解决方案,我会把它作为未来读者的答案。

假设要详细说明的行如下所示:

@DontTouchMe@/${PROJECT_NAME}

为了能够在将文件传递给@DontTouchMe@时跳过configure_file部分,您可以按照以下方式更改行:

@@Workaround@DontTouchMe@Workaround@@/${PROJECT_NAME}

configure_file将使用空字符串匹配并替换@Workaround@个部分,并忘记其他@左右,以便在替换后获得以下行:

@DontTouchMe@/TheNameOfTheProject

相当脏,它可能会在cmake的未来版本中爆发,因为它实际上利用了 bug (嗯,我不确定我可以这样称呼它)工具。
无论如何,它仍然有效,对那些仍在寻找可能解决方案的人来说是一种可行的方法。