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)
把我的评论变成答案
什么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/i386和d:/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
参考
| 归档时间: |
|
| 查看次数: |
6260 次 |
| 最近记录: |