前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cmake:用add_subdirectory()添加外部项目文件夹

cmake:用add_subdirectory()添加外部项目文件夹

作者头像
10km
发布2019-05-25 22:35:16
5.6K0
发布2019-05-25 22:35:16
举报
文章被收录于专栏:10km的专栏10km的专栏

版权声明:本文为博主原创文章,转载请注明源地址。 https://cloud.tencent.com/developer/article/1433742

一般情况下,我们的项目各个子项目都在一个总的项目根目录下,但有的时候,我们需要使用外部的文件夹,怎么办呢?

add_subdirectory命令,可以将指定的文件夹加到build任务列表中。下面是将与当前项目平级的一个目录下的子目录用add_subdirectory命令加进来的CMakelists.txt脚本片段 :

#定义CASSDK位置
if(NOT CASSDK_DIR)
    set( CASSDK_DIR ${CMAKE_SOURCE_DIR}/../cassdk)
endif()
if( IS_DIRECTORY ${CASSDK_DIR} )
    add_subdirectory( ${CASSDK_DIR}/cassdk )
else()
    message(FATAL_ERROR   "INVALID FOLDER 'CASSDK_DIR'=${CASSDK_DIR}" )
endif()

然后执行CMakeList.txt脚本时报错了:

CMake Error at CMakeLists.txt:35 (add_subdirectory): add_subdirectory not given a binary directory but the given source directory “J:/workspace/cassdk/cassdk” is not a subdirectory of “J:/workspace/codemgr”. When specifying an out-of-tree source a binary directory must be explicitly specified.

报错原因也很明确,因为要添加的这个文件夹不是当前项目的子目录。最后一句指明了方向:要指定一个外部的文件夹必须显式指定

但怎么显式指定?

下面是add_subdirectory命令的官方说明:

原来add_subdirectory还有一个 binary_dir参数(一般这个参数用不到,所以从来没关注过),这个参数用来指定source_dir在输出文件夹中的位置,如果没有指定的时候,就用source_dir的值。

如果要添加外部文件夹,binary_dir就必须指定。所以上面的代码修改如下:

#定义CASSDK位置
if(NOT CASSDK_DIR)
    set( CASSDK_DIR ${CMAKE_SOURCE_DIR}/../cassdk)
endif()
if( IS_DIRECTORY ${CASSDK_DIR} )
    # 第二个cassdk.out参数用于指定外部文件夹在输出文件夹中的位置
    add_subdirectory( ${CASSDK_DIR}/cassdk cassdk.out)
else()
    message(FATAL_ERROR   "INVALID FOLDER 'CASSDK_DIR'=${CASSDK_DIR}" )
endif()

再执行CMakeList.txt正常通过,下图红框标出就是cassdk子目录下CMakeLists.txt的执行输出。

然后你可以发现在输出文件夹下多出一个名为cassdk.out的文件夹,就是第二个参数指定的值。

参考:

https://cmake.org/cmake/help/v3.1/command/add_subdirectory.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年07月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档