CMake build&链接到库而不安装到/ usr / local或其他地方

时间:2013-06-01 00:15:33

标签: cmake

我正在尝试在使用CMake的构建环境中包含外部库。我不是试图在本地系统上安装它(实际上我宁愿那样做,我不希望/usr/local被各种库堵塞);我只想让结果libxml2.a可用于链接我的可执行文件。我可以使用CMakeLists.txt中的以下内容构建它:

set (LIBXML_PATH ${MY_SOURCE_DIR}/libxml2-2.9.1)
add_custom_target (build_libxml ALL
    COMMENT "Building libxml"
    COMMAND ./configure --prefix=/tmp
    COMMAND make
    WORKING_DIRECTORY ${LIBXML_PATH}
)

但我仍然遇到以下问题:

1)首先,这是一种正确的方法,是否将使用configuremake构建的库加入CMake环境?

2)如何在libxml2.a输出目录下获得结果库(即build)?

3)如何链接到该库以进行可执行构建?

我用

尝试了一个繁琐的解决方案
ADD_LIBRARY( xml2 STATIC libxml2.a )

但似乎必须有比将整个图书馆的内容拖入图书馆更好的方法。

感谢。

1 个答案:

答案 0 :(得分:1)

你需要让CM更清楚地了解这里发生的事情。它现在可以看到的是,你有一些自定义命令,它每次都会运行。我没有将add_custom_targetCOMMAND一起使用,而是发现使用add_custom_command更好。

这样的事情:

set (LIBXML_PATH ${MY_SOURCE_DIR}/libxml2-2.9.1)
add_custom_command(
    OUTPUT libxml2.a
    COMMENT "Building libxml"
    COMMAND ./configure --prefix=/tmp
    COMMAND make
    WORKING_DIRECTORY ${LIBXML_PATH}
)
target_link_libraries(your-program libxml2.a)

通过这样做,CMake可以理解你的自定义命令的基本产品是libxml2.a,当CMake根据它看到某些东西时,它将运行命令(如果库已经不存在)。