我正在尝试在使用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)首先,这是一种正确的方法,是否将使用configure
和make
构建的库加入CMake环境?
2)如何在libxml2.a
输出目录下获得结果库(即build
)?
3)如何链接到该库以进行可执行构建?
我用
尝试了一个繁琐的解决方案ADD_LIBRARY( xml2 STATIC libxml2.a )
但似乎必须有比将整个图书馆的内容拖入图书馆更好的方法。
感谢。
答案 0 :(得分:1)
你需要让CM更清楚地了解这里发生的事情。它现在可以看到的是,你有一些自定义命令,它每次都会运行。我没有将add_custom_target
与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根据它看到某些东西时,它将运行命令(如果库已经不存在)。