cmake构建时加入第三方库需要构建两次才能成功

在使用cmake构建项目时,因为用到了libyuv,于是开始使用了以下的构建方式

ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/libyuv ${CMAKE_CURRENT_BINARY_DIR}/libyuv)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libyuv/include)
FILE(COPY ${CMAKE_CURRENT_SOURCE_DIR}/libyuv/include DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/libyuv)
SET(LIBYUV_LIBS ${CMAKE_CURRENT_BINARY_DIR}/libyuv/libyuv.a)

ADD_EXECUTABLE(${PROJECT_NAME} main.cpp)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${LIBYUV_LIBS})

然后进行构建

mkdir -p build
cd build
cmake ..
make -j

但是构建时第一次构建失败,需要再构建一次才能成功。后来经过查找资料,发现这样写cmake不知道项目和libyuv是依赖关系,没有按照顺序先生成libyuv.a,再将其链接到项目。因此,正确且简单的解决方法是,添加库文件的搜索路径,使用与库链接使用库目标名称,而不是直接库文件。修改后的CMakeLists如下:

ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/libyuv ${CMAKE_CURRENT_BINARY_DIR}/libyuv)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libyuv/include)
FILE(COPY ${CMAKE_CURRENT_SOURCE_DIR}/libyuv/include DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/libyuv)
LINK_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}/libyuv)

ADD_EXECUTABLE(${PROJECT_NAME} main.cpp)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} yuv)

现在表明了项目和libyuv之间的依赖关系,因此make -j将不再尝试并行地构建它们,这时候进行构建则一次成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值