考虑以下几点:
target_link_directories(${PROJECT_NAME} PUBLIC
"../MyProjectNameSharedComponents/glew/lib/x64"
"../MyProjectNameSharedComponents/OpenImageIO/Windows/lib"
#and etc.
这将导致解决方案中的“其他库目录”中出现以下行:
C:/Users/user/Documents/gpu-open/MyProjectName/MyProjectName.Src/../MyProjectNameSharedComponents/glew/lib/x64
C:/Users/user/Documents/gpu-open/MyProjectName/MyProjectName.Src/../MyProjectNameSharedComponents/glew/lib/x64/$(Configuration)
C:/Users/user/Documents/gpu-open/MyProjectName/MyProjectName.Src/../MyProjectNameSharedComponents/OpenImageIO/Windows/lib
C:/Users/user/Documents/gpu-open/MyProjectName/MyProjectName.Src/../MyProjectNameSharedComponents/OpenImageIO/Windows/lib/$(Configuration)
通过生成器表达式生成的行显示类似的行为,例如
"$<$<CONFIG:Debug2022>:"
"$ENV{MAYA_X64_2022}/lib"
">"
生产:
C:/Program Files/Autodesk/Maya2022/lib
C:/Program Files/Autodesk/Maya2022/lib/$(Configuration)
在macOS上情况更糟,CMake将$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
添加到Xcode项目的LibrarySearchPath
行中。
这行“/$(Configuration)”是从哪里来的,我如何删除它?
1条答案
按热度按时间xiozqbni1#
在撰写本文时(CMake 3.27是最新版本),对于Visual Studio生成器,看起来这是硬编码在CMake源代码中,没有任何方法禁用它。
在cmVisualStudio10TargetGenerator.cxx的
cmVisualStudio10TargetGenerator::ComputeLinkOptions
中您可以使用build your own modified version of CMake或ask the maintainers to add a feature来切换此行为。
对于Xcode生成器,看起来你可以通过改变policy CMP0142(
cmake_policy(SET CMP0142 NEW)
)来禁用它。引用文档:Xcode生成器不会将per-config后缀附加到库搜索路径。
在CMake 3.24及更低版本中,Xcode生成器在库搜索路径的每个条目之前添加一个自身的副本,并附加
$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
。这是早期版本的CMake遗留下来的,在早期版本中,每个配置的目录都没有很好地建模。这样的路径通常不存在,导致来自工具链的警告。CMake 3.25及更高版本不希望添加此类库搜索路径。此策略为可能意外依赖旧行为的项目提供了兼容性。此策略的
OLD
行为是将$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
附加到所有库搜索路径。NEW
行为是不修改库搜索路径。该策略在CMake 3.25版本中引入。使用
cmake_policy()
命令将其显式设置为OLD
或NEW
。与许多策略不同,CMake版本3.27.0-rc 3在未设置此策略时不会发出警告,而只是使用OLD
行为。参见
cmGlobalXCodeGenerator.cxx
的cmGlobalXCodeGenerator::AddDependAndLinkInformation
:你需要问维护人员为什么这些东西会是这样的(至少从历史的Angular 来看)。参见https://discourse.cmake.org/。如果你问,请在这里发表评论,并链接到话语页面。