通过生成器表达式设置CMAKE_SYSROOT

通过生成器表达式设置CMAKE_SYSROOT,cmake,Cmake,在我们的项目中,我们将根据所选配置进行设置。这是因为配置表达了(除其他外)目标平台(交叉编译——但不仅如此,还有轻微的行为差异) 我们希望通过对多配置IDE友好来表达这一点 然而,我们还没有找到这样做的方法。首先,你会注意到这甚至没有提到这种可能性。我们仍然尝试将其设置为类似的值(不是精确值-只是一个示例!): set(CMAKE\u SYSROOT$) 希望该值在支持的上下文中使用。但显然,事实并非如此。相反,逐字记录值似乎是在--sysroot参数(--sysroot=“\$”)中提供的。

在我们的项目中,我们将根据所选配置进行设置。这是因为配置表达了(除其他外)目标平台(交叉编译——但不仅如此,还有轻微的行为差异)

我们希望通过对多配置IDE友好来表达这一点

然而,我们还没有找到这样做的方法。首先,你会注意到这甚至没有提到这种可能性。我们仍然尝试将其设置为类似的值(不是精确值-只是一个示例!):

set(CMAKE\u SYSROOT$)
希望该值在支持的上下文中使用。但显然,事实并非如此。相反,逐字记录值似乎是在
--sysroot
参数(
--sysroot=“\$”
)中提供的。在值周围添加引号不会改变任何内容

我们还有什么其他选择


我还要补充一点关于的说明,该说明已在的文件中提到

我没有看到在
grep
-ing之后通过
cmake-DCMAKE\u BUILD\u TYPE=hw1../
和我们自己的源代码生成的文件设置任何内容

显然,我们设置的文件不是指向的。然而,
--sysroot
参数仍被设置为预期值。(只是不是通过!)所以,它确实在某种程度上起了作用


我预计其他变量也会出现同样的问题:

  • ,
  • ,
  • ,

最后两个取决于反正(在我们的例子中)。

如果您真的想在多配置生成器上向链接器传递不同的
--sysroot
标志,您只需使用生成器表达式通过
target\u link\u options
传递即可。但是,您可能需要自己更新
rpath
项,但我不确定这一点

生成时不使用变量,生成器表达式的文档说明: 在许多目标属性的上下文中允许使用生成器表达式…

我在
set
命令中没有看到任何阻止
CMAKE\u SYSROOT
被设置在工具链文件之外的内容。我猜短语
此变量只能在工具链文件中设置
应该是
此变量通常在工具链文件中使用


似乎您正试图使用构建类型作为两个不同工具链之间的切换。如果是这样的话,那么我看不出如何在多配置生成器中正确工作。您想设置的大部分内容都是在配置时而不是构建时确定和使用的。

如果您真的想在多配置生成器上向链接器传递不同的
--sysroot
标志,您只需使用生成器表达式通过
目标链接选项传递即可。但是,您可能需要自己更新
rpath
项,但我不确定这一点

生成时不使用变量,生成器表达式的文档说明: 在许多目标属性的上下文中允许使用生成器表达式…

我在
set
命令中没有看到任何阻止
CMAKE\u SYSROOT
被设置在工具链文件之外的内容。我猜短语
此变量只能在工具链文件中设置
应该是
此变量通常在工具链文件中使用


似乎您正试图使用构建类型作为两个不同工具链之间的切换。如果是这样的话,那么我看不出如何在多配置生成器中正确工作。您想要设置的大部分内容都是在配置时确定和使用的,而不是在构建时。

是的,看起来我基本上想要在不同的工具链之间切换。但是为什么不起作用呢?从我的观点来看,它似乎只是对编译器调用中的一组参数。从我的观点来看,它与更改其他编译器标志没有什么不同。那么,困难在哪里呢?我希望可以手动添加
--sysroot
。但首先,我不确定mygiht在变量上还传递了什么,我也必须处理它。其次,我提到的其他变量似乎与编译器/链接器参数不太一致,那么这些变量呢?@AdamBadura
CMAKE\uu compiler
不是编译器标志。它是编译器。一旦
CMake
看到
project
命令,它就会运行测试,以查看您使用的编译器系列、要使用的默认编译器选项等等。当CMake配置并生成生成文件时会发生这种情况。一旦确定,在使用构建工具(例如,
make
)时无法更改编译器。困难在于你所要求的功能根本没有实现。是的,看起来我本质上想在不同的工具链之间切换。但是为什么不起作用呢?从我的观点来看,它似乎只是对编译器调用中的一组参数。从我的观点来看,它与更改其他编译器标志没有什么不同。那么,困难在哪里呢?我希望可以手动添加
--sysroot
。但首先,我不确定mygiht在变量上还传递了什么,我也必须处理它。其次,我提到的其他变量似乎与编译器/链接器参数不太一致,那么这些变量呢?@AdamBadura
CMAKE\uu compiler
不是编译器标志。它是编译器。一旦
CMake
看到
project
命令,它就会运行测试,以查看您使用的编译器系列、要使用的默认编译器选项等等。当CMake配置并生成生成文件时会发生这种情况。一旦确定,在使用构建工具(例如,
make
)时无法更改编译器。困难在于您所要求的功能根本没有实现。
set(CMAKE_SYSROOT $<IF:$<CONFIG:hw1>,path1,path2>)