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
的文件夹,就是第二个参数指定的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2015-12-09 SecureCRT 绝佳配色方案