我正在构建和分发一个可执行文件,它依赖于几个第三方库,其中大部分是在CMake的构建系统之外构建的(但是,如果有帮助,我可以添加并构建它们为我的CMake文件中的自定义目标。)
以下是我如何包含libs:
target_link_libraries(MyApp
Lib1_x64
Lib2_x64
etc.}
我想要包含一个CMake指令,它可以安装我的可执行文件及其依赖项。除了为每个依赖项调用install命令之外,还有更好的方法吗?
install(DIRECTORY ${DEV_PATH}/Release/ DESTINATION lib FILES_MATCHING PATTERN "libLib1*" PATTERN "*.svn" EXCLUDE PATTERN "*-obj" EXCLUDE)
是否可以通过 add_library 命令执行此操作?
答案 0 :(得分:0)
抱歉,没有。 add_library
命令用于在makefile中创建目标以构建库。 target_link_dependencies
只是将各种-L ... -l ...
标志传递给目标编译器。
正常的CMake方法是测试您所依赖的其他库或可执行文件是否存在,如果它们不可用则会失败。
处理依赖关系通常留给包管理,例如apt,rpm等。由于多种原因,将依赖组件构建为自己的makefile的一部分是不明智的:
作为使用CMake构建整个嵌入式Linux发行版的大部分内容的人(请参阅Open webOS),我建议您将脚本专注于构建一件事。
答案 1 :(得分:0)
我今天也在寻找解决这个问题的方法。
我发现:
include(ExternalProject)
ExternalProject_Add()
做到了!
这是我的示例CMakeLists.txt:
cmake_minimum_required(VERSION 3.13)
project(third-party-build)
include(ExternalProject)
ExternalProject_Add(libuuid
PREFIX libuuid-prefix
# DOWNLOAD_DIR libuuid-download
# SOURCE_DIR libuuid-source
# DOWNLOAD_COMMAND wget xxx.com/xxx.tar.gz && tar zxf xxx.tar.gz
DOWNLOAD_COMMAND tar zxf ${PROJECT_SOURCE_DIR}/libuuid-1.0.3.tar.gz
CONFIGURE_COMMAND <DOWNLOAD_DIR>/libuuid-1.0.3/configure
BUILD_COMMAND ${MAKE}
BUILD_IN_SOURCE 1
INSTALL_COMMAND mkdir -p ${PROJECT_SOURCE_DIR}/lib/ && cp <SOURCE_DIR>/.libs/libuuid.a <SOURCE_DIR>/.libs/libuuid.so <SOURCE_DIR>/.libs/libuuid.so.1 <SOURCE_DIR>/.libs/libuuid.so.1.0.0 ${PROJECT_SOURCE_DIR}/lib/
LOG_DOWNLOAD 1
LOG_BUILD 1
# LOG_INSTALL 1
)