在 Visual Studio Code 中 CMake 项目切换 Debug 和 Release 的效果是怎样的?

问题描述 投票:0回答:1

我想要完成的是链接同名但来自不同路径的库。

目前我正在帮助自己

link_directories(${FOREIGN_DIR}/arch/win32/apil/access/x64/${CMAKE_BUILD_TYPE})

然后链接foreign_lib.lib:

target_link_libraries(${LIB_NAME} ${CMAKE_JS_LIB} foreign_lib ${EXTRA_LIB})

编辑:我正在使用 Ninja 进行构建(单一配置类型)

foreign_lib.lib
显然存在于正确命名的子目录中的调试和发布变体中,如您在上面看到的,但两者具有相同的名称,我无法影响这一点。

此外,我还必须自己在脚本中进一步设置

CMAKE_BUILD_TYPE
,因为它是空的(该变量的文档通常毫无价值),这只是一个占位符,而且据我所知也是丑陋/不好的做法。

我不明白的是:

VisualStudio Code 中的 CMake 工具为我提供了众所周知的选项

Debug, Release, MinSizeRel, RelWithDebInfo
,但我无法理解如何在配置步骤中正确使用它。

在这种情况下如何正确进行链接?

PS:通过考虑架构(

x64
Win32
...)和目标系统(
linux
x64
,...)来整合进一步的变化将是一个优点,但我主要关心的是上述问题RN.

visual-studio-code cmake linker
1个回答
0
投票

在这种情况下如何正确进行链接?

初学者请参阅 https://stackoverflow.com/a/74077157/11107541。对于单配置和多配置生成器,使用不同构建配置进行配置/构建的命令行方法有所不同。 CMake 工具将/应该根据所选生成器的类型做正确的事情,无论您使用的是套件还是预设(但如果您使用预设,则必须在单配置的缓存变量中做正确的事情,并且在

configuration
多配置生成器的构建预设属性)。

此外,我还必须自己在脚本中进一步设置 CMAKE_BUILD_TYPE ,因为它是空的(该变量的文档通常毫无价值),这只是一个占位符,而且据我所知也是丑陋/不好的做法。

你应该使用生成器表达式。

一般情况下,不要使用

${CMAKE_BUILD_TYPE}
。正如您所注意到的,不需要为单配置生成器(其中使用特定于工具链的默认值)设置它。文档非常清楚:

此变量由首次创建新构建树时在项目中调用的第一个

project()
enable_language()
命令初始化。如果设置了
CMAKE_BUILD_TYPE
环境变量,则使用其值。否则,启用语言时会选择特定于工具链的默认值。默认值通常是空字符串,但这通常是不可取的,其他标准构建类型之一通常更合适。

您想要的生成器表达式是

$<CONFIG>
,或者使用
$<CONFIG:cfgs>
映射到其他值。

© www.soinside.com 2019 - 2024. All rights reserved.