Gab*_*iel 21 c++ cmake visual-studio-2010
已经有一个线程没有真正帮助.我希望能够链接例如Foo.lib 用于发布配置和Foo_d.lib的调试配置,我怎么能做到这一点?如果我这样做:
target_link_libraries(MyEXE debug Foo_d)
target_link_libraries(MyEXE optimized Foo)
Run Code Online (Sandbox Code Playgroud)
那么我的项目中有两个库用于调试配置?为什么没有发布选项?
非常感谢!
小智 28
target_link_libraries采用一个列表,您不需要调用它两次.以下将有效:
target_link_libraries(MyEXE debug Foo_d optimized Foo)
Run Code Online (Sandbox Code Playgroud)
要回答另一个答案的评论中提出的问题,使用多个库的工作原理如下:
target_link_libraries(MyEXE
debug Foo1_d optimized Foo1
debug Foo2_d optimized Foo2)
Run Code Online (Sandbox Code Playgroud)
请注意,如果您还将库构建为CMake项目的一部分,则无需指定debug或optimize.CMake会为您选择合适的.
Nas*_*zta 24
解决方案是:
SET(LINK_LIBRARY optimized Foo debug Foo_d)
target_link_libraries(MyEXE ${LINK_LIBRARY})
Run Code Online (Sandbox Code Playgroud)
小智 15
当您的库是项目的一部分或者您使用config mode of find_packagecommand 导入它时没有问题(请参阅文档和示例).万一你不能修改第三方所以它会产生<package>Config.cmake
(它可能不会使用cmake工具或你不想这样做)答案是模仿这样的过程:
add_library(foo STATIC IMPORTED)
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/foo-d.lib")
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/foo.lib")
target_link_libraries(MyEXE foo)
Run Code Online (Sandbox Code Playgroud)
请注意,与"debug"/"optimized"功能不同,此类方法不仅限于Debug/Release配置:
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_MINSIZEREL "/path/to/foo-small.lib")
Run Code Online (Sandbox Code Playgroud)
你也有一些像INTERFACE_INCLUDE_DIRECTORIES的东西:
set_target_properties(foo PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "/path/to/foo/includes")
include_directories("/path/to/foo/includes") # this line not needed
target_link_libraries(MyEXE foo) # this command will add "/path/to/foo/includes" for you
Run Code Online (Sandbox Code Playgroud)
和传递链接:
add_library(boo STATIC IMPORTED)
set_target_properties(boo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/boo-d.lib")
set_target_properties(boo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/boo.lib")
add_library(foo STATIC IMPORTED)
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_DEBUG "/path/to/foo-d.lib")
set_target_properties(foo PROPERTIES IMPORTED_LOCATION_RELEASE "/path/to/foo.lib")
set_target_properties(foo PROPERTIES INTERFACE_LINK_LIBRARIES boo) # foo depends on boo
target_link_libraries(MyEXE foo) # boo will be linked automatically
Run Code Online (Sandbox Code Playgroud)
当然,你可以使用普通的CMake命令状find_library,并find_package(... MODULE)估算位置,而不是硬编码他们.
如果你有调试/发布库遵循某种模式,比如调试版的_d,你可以避免重复自己:
set (MY_LIBS
foo
bar
baz
)
# Generate the list of files to link, per flavor.
set (LINK_LIST "")
foreach(x ${MY_LIBS})
list (APPEND LINK_LIST debug ${x}_d optimized ${x})
endforeach()
target_link_libraries (mytarget
commonlib1
commonlib2
${LINK_LIST}
)
Run Code Online (Sandbox Code Playgroud)
这将产生适当的
debug foo_d optimized foo
debug bar_d optimized bar
Run Code Online (Sandbox Code Playgroud)
target_link_libraries期望的行.
| 归档时间: |
|
| 查看次数: |
18867 次 |
| 最近记录: |