我在mylib.pc.in
中有以下代码,并希望使用CMake命令configure_file(mylib.pc.in mylib.pc)
生成一个正确的mylib.pc
文件,该文件是从mylib.pc.in
扩展的;但这不起作用。
prefix=$ENV{HOME}/xcompiled-root/
exe_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include
Name: @PROJECT_NAME@
Description: @PROJECT_DESCRIPTION@
Version: @PROJECT_VERSION@
Requires:
Libs: -L@{libdir} -lpthread -lrt -ldl -lm
Cflags: -I@{includedir}
字符串
我只想让mylib.pc
像这样:
prefix=/home/myusr/xcompiled-root/
exe_prefix=/home/myusr/xcompiled-root/
libdir=/home/myusr/xcompiled-root/lib
includedir=/home/myusr/xcompiled-root/include
...
型
但我明白了
prefix=/home/myusr/xcompiled-root/
exe_prefix=
libdir=/lib
includedir=/include
...
型
我该怎么办
1条答案
按热度按时间vxf3dgd41#
构造
${prefix}
在CMake脚本中和.pc
文件脚本中都是一个变量引用,所以你需要选择在哪个阶段展开这个引用:1.如果想让CMake展开这个引用,在使用
configure_file
时需要有一个名为prefix
的CMake变量:字符串
注意,通过这样的设置,您不再需要在
.pc
文件中定义prefix
变量:型
生成的
mylib.pc
文件将是:型
1.如果只想在调用pkg-config时展开变量引用
${prefix}
,则需要阻止CMake展开该引用,例如可以在$
和{
字符之间插入CMake展开为空的${}
结构:型
然后,用普通的
configure_file
型
您将获得以下
mylib.pc
文件:型
当
pkg-config
处理此文件时,${prefix}
将扩展(内部)为/home/myusr/xcompiled-root/
。1.如果你不想为转义
${}
的构造而烦恼,可以为configure_file
使用@ONLY
选项。使用该选项,CMake只会扩展@VAR@
,但不会更改${var}
:型
使用
@ONLY
选项,您可以简单地在.in
中使用$
:型
注意,CMake也保留了
@{var}
结构不变。这是因为{
字符在CMake中对于变量名无效。