在我的项目中,我有各种各样的依赖项,其中一些带有 cmake 文件,我可以很好地使用target_link_libraries()
(例如boost_program_options
),但有些则不能(例如openssl
;出于兼容性原因,我必须编译自定义版本)并且我必须对ExternalProject_Add
它们使用和,然后我需要混合使用target_link_libraries()
、target_compile_options()
和target_link_options()
,例如:
# This is only for certain libraries.
target_compile_options(my_program
PUBLIC
-I${OPENSSL_INSTALL_DIR}/include
)
# This is only for certain libraries.
target_link_options(my_program
PUBLIC
-L${OPENSSL_INSTALL_DIR}/lib
)
# This is only for everything, but I have to remember
# whether I add the target name or the actual library
# files.
target_link_libraries(my_program
PUBLIC
boost_program_options
libssl.a libcrypto.a
)
我宁愿做的是用类似以下内容替换它:
# Everything in one place.
target_link_libraries(my_program
PUBLIC
boost_program_options
openssl_pseudo_target
)
并在其他地方openssl_pseudo_target
告知cmake
要使用的适当的编译/链接选项/库。
有什么方法可以做到这一点,或者达到类似的效果吗?
这就是接口库的用途。它们还提供了与您想要执行的操作类似的示例:
PS 还
find_package(OpenSSL)
提供所需的目标,因此您不需要自己制作。