【问题标题】:CMake set VisualStudion2010 parameters "Additional Library Directories"CMake设置VisualStudion2010参数“附加库目录”
【发布时间】:2016-01-20 02:48:14
【问题描述】:

如何在 VisualStudio2010 中使用 CMake 设置属性“附加库目录”。

例子:

%(AdditionalLibraryDiretories) = "d:/librarys/wnt/i386/debug/"

配置参数->链接器->通用->“附加库目录”

我试过了,还是不行。

link_directories("d:/librarys/wnt/i386/debug/")

【问题讨论】:

  • 我刚刚用 VS2012 / CMake 3.3.0 对其进行了测试,它似乎工作正常。如果您将link_directories("d:/librarys/wnt/i386") 放在我的add_executable(...) 调用之前,我会得到一个带有d:/librarys/wnt/i386;d:/librarys/wnt/i386/$(Configuration);%(AdditionalLibraryDirectories) 的“附加库目录”属性。请参阅link_directories() 文档。
  • THX 弗洛里安它工作。我的问题是 add_executelink_directory 之前
  • 现在的问题是 AdditionalLibraryD‌​irectories 依赖于配置。 debug 库除了 release 还有其他路径
  • 请看我最后的评论。我在那里删除了您的 debug 部分,因为 CMake 确实 - 覆盖依赖于 Config 的库 - 包括您在 link_directories() 中给出的两个变体:d:/librarys/wnt/i386d:/librarys/wnt/i386/$(Configuration)。只是一个提示:我在任何项目中都不需要link_directories()。所以我想知道 - 诚然不知道你的用例 - 如果你不能使用 target_link_libraries() 代替?
  • 路径没有命名为 d:/librarys/wnt/i386/ $(Configuration) = debug 而是例如d:/librarys/wnt/i386/fooba.

标签: c++ visual-studio cmake


【解决方案1】:

把我的 cmets 变成答案

link_directories() 涵盖什么内容?

我使用 VS2012 / CMake 3.3.0 对其进行了测试,如果您将 link_directories(...) 放在您的 add_executable(...) 调用之前,它似乎工作正常。

link_directories("d:/librarys/wnt/i386")

get_directory_property(_my_link_dirs LINK_DIRECTORIES)
message(STATUS "_my_link_dirs = ${_my_link_dirs}") 

add_executable(...)

您使用link_directories() 添加的所有内容都将附加到目录属性LINK_DIRECTORIES 并分配给之后列出的任何目标。

在上面的示例中,我得到了 Visual Studio“附加库目录”属性:

d:/librarys/wnt/i386;d:/librarys/wnt/i386/$(Configuration);%(AdditionalLibraryD‌​irectories)

CMake 确实 - 根据 Config 覆盖库 - 包括您在 link_directories() 中给出的两个变体:d:/librarys/wnt/i386d:/librarys/wnt/i386/$(Configuration)

如果您需要更多灵活性怎么办?

如果您的 debug/release 路径名与 VS 配置名称不匹配(例如,fooba 对应于 debug),则不能使用 link_directories()。一种方法是直接扩展链接器标志:

project(...)
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /LIBPATH:\"d:/librarys/wnt/i386/fooba\"") 

然后我进入Debug 配置属性:

%(AdditionalLibraryDirectories);d:/librarys/wnt/i386/fooba

由于link_directories()缺乏灵活性,我通常只使用target_link_libraries()命令。例如:

target_link_libraries(MyExe debug "d:/librarys/wnt/i386/fooba/foo.lib")

会在 Debug “Additional Dependencies” 属性中给出:

kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;d:\librarys\wnt\ i386\fooba\foo.lib

参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多