我正在尝试使用 CMake 和 Xcode 从另一个库链接到一个库。
这对任何图书馆来说都是一个问题,但为了让事情更容易传达,让我们使用zlib
举个例子。
这似乎适用于可执行文件,如下所示:
LINK_DIRECTORIES(${LIB_DIR}/zlib/build/)
ADD_EXECUTABLE(MY_EXECUTABLE ...
它会生成一个 Xcode 项目,其设置如下所示:
如您所见,$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
位被正确添加到zlib
库路径。
但如果我尝试这样做:
LINK_DIRECTORIES(${LIB_DIR}/zlib/build/)
ADD_LIBRARY(MY_LIBRARY ...
zlib
永远不会链接到MY_EXECUTABLE
当我将它链接到MY_LIBRARY
And TARGET_LINK_LIBRARIES
after ADD_LIBRARY
允许我链接到zlib
from MY_LIBRARY
但我必须指定完整路径,这将不起作用,因为配置(调试、发布等)以及有效平台(iphoneos、iphonesimulator 等)都是因素。
我想做的是拥有zlib
添加到 Xcode 库搜索路径,其中$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
位,如上图。
将我的评论变成答案
CMake 确实支持将适当的配置添加到多配置环境中的路径中生成器表达式 http://www.cmake.org/cmake/help/v3.3/manual/cmake-generator-expressions.7.html#informational-expressions(参见例如CMake - 访问多配置生成器的配置参数 https://stackoverflow.com/questions/29045385/cmake-accessing-configuration-parameters-of-multiple-configuration-generators)
和论据目标链接库() http://www.cmake.org/cmake/help/v3.3/command/target_link_libraries.html支持使用生成器表达式。所以在你的情况下你可以利用$<CONFIG>
生成器表达式看起来像这样:
TARGET_LINK_LIBRARIES(MY_LIBRARY ${LIB_DIR}/zlib/build/$<CONFIG>/...)
请注意 - 如果您可能更改了某些政策 - 来自target_link_libraries()
有关政策的文档CMP0003 - 通过完整路径链接的库不再生成链接器搜索路径 http://www.cmake.org/cmake/help/v3.3/policy/CMP0003.html#policy:CMP0003 and CMP0004 - 链接的库可能没有前导或尾随空格 http://www.cmake.org/cmake/help/v3.3/policy/CMP0004.html#policy:CMP0004:
但请注意,生成器表达式不会在 OLD 中使用
CMP0003 或 CMP0004 的处理
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)