3

我正在尝试在使用 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)首先,这是否是正确的方法,用于将库构建到 CMake 环境中configure并用于一般目的?make

2)我如何在我的输出目录libxml2.a下获得生成的库(即) ?build

3) 如何为我的可执行文件链接到该库?

我尝试了一个繁琐的解决方案

ADD_LIBRARY( xml2 STATIC libxml2.a )

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

谢谢。

4

1 回答 1

0

你需要让 CMake 更清楚这里发生了什么。它现在所能看到的只是你有一些自定义命令,它每次都会运行。而不是使用add_custom_targetwith COMMAND,我发现使用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 看到依赖于此的内容时,它将运行该命令(如果该库尚不存在)。

于 2013-06-01T04:25:37.237 回答