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

一般情况下,我们的项目各个子项目都在一个总的项目根目录下,但有的时候,我们需要使用外部的文件夹,怎么办呢? 
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://www.cnblogs.com/qiumingcheng/p/8012128.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值