CMake 设置 VisualStudion2010 参数“附加库目录”

pos*_*irk 4 c++ cmake visual-studio

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

例子:

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

在此处输入图片说明

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

我试过这个,但它不起作用。

link_directories("d:/librarys/wnt/i386/debug/")
Run Code Online (Sandbox Code Playgroud)

Flo*_*ian 5

把我的评论变成答案

什么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(...)
Run Code Online (Sandbox Code Playgroud)

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

在上面的例子中,我进入了 Visual Studio 的“附加库目录”属性:

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

CMake 确实 - 根据配置覆盖库 - 包括您在 link_directories():d:/librarys/wnt/i386d:/librarys/wnt/i386/$(Configuration).

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

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

project(...)
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /LIBPATH:\"d:/librarys/wnt/i386/fooba\"") 
Run Code Online (Sandbox Code Playgroud)

然后我进入Debug配置属性:

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

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

target_link_libraries(MyExe debug "d:/librarys/wnt/i386/fooba/foo.lib")
Run Code Online (Sandbox Code Playgroud)

将在调试“附加依赖项”属性中给出:

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

参考