我想要完成的是链接同名但来自不同路径的库。
目前我正在帮助自己
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.
在这种情况下如何正确进行链接?
初学者请参阅 https://stackoverflow.com/a/74077157/11107541。对于单配置和多配置生成器,使用不同构建配置进行配置/构建的命令行方法有所不同。 CMake 工具将/应该根据所选生成器的类型做正确的事情,无论您使用的是套件还是预设(但如果您使用预设,则必须在单配置的缓存变量中做正确的事情,并且在
configuration
多配置生成器的构建预设属性)。
此外,我还必须自己在脚本中进一步设置 CMAKE_BUILD_TYPE ,因为它是空的(该变量的文档通常毫无价值),这只是一个占位符,而且据我所知也是丑陋/不好的做法。
你应该使用生成器表达式。
一般情况下,不要使用
${CMAKE_BUILD_TYPE}
。正如您所注意到的,不需要为单配置生成器(其中使用特定于工具链的默认值)设置它。文档非常清楚:
此变量由首次创建新构建树时在项目中调用的第一个
或project()
命令初始化。如果设置了enable_language()
环境变量,则使用其值。否则,启用语言时会选择特定于工具链的默认值。默认值通常是空字符串,但这通常是不可取的,其他标准构建类型之一通常更合适。CMAKE_BUILD_TYPE
$<CONFIG>
,或者使用 $<CONFIG:cfgs>
映射到其他值。