如何在CMake外部获取其构建目录的路径?
在CMake外部获取构建目录路径的几种方法
以下是几个实用方案,帮你在Python脚本中拿到CMake构建目录的路径:
1. 让CMake生成路径记录文件
在你的CMakeLists.txt中添加一行代码,让CMake在构建时自动将构建目录路径写入文本文件:
# 在构建目录下生成build_path.txt,内容为当前构建目录的绝对路径 file(WRITE ${CMAKE_BINARY_DIR}/build_path.txt "${CMAKE_BINARY_DIR}")
之后Python脚本可直接读取该文件获取路径:
with open("build/build_path.txt", "r") as f: build_dir = f.read().strip()
注:如果是源码外构建,你需要知道初始指定的构建目录(比如build)才能找到这个文件;若不确定初始目录,可在项目根目录递归查找build_path.txt。
2. 解析CMake缓存文件
CMake会在构建目录下生成CMakeCache.txt,其中包含CMAKE_BINARY_DIR变量的定义。Python可解析该文件提取路径:
import re def get_build_dir_from_cache(root_dir): cache_path = f"{root_dir}/CMakeCache.txt" with open(cache_path, "r") as f: content = f.read() match = re.search(r'CMAKE_BINARY_DIR:PATH=(.*)', content) if match: return match.group(1).strip() return None # 调用示例:假设项目根目录为当前目录 build_dir = get_build_dir_from_cache(".")
3. 通过CMake命令查询缓存变量
直接在Python中调用cmake命令查询CMAKE_BINARY_DIR的值:
import subprocess def get_build_dir_via_cmake(root_dir): result = subprocess.run( ["cmake", "-LA", "-S", root_dir], capture_output=True, text=True ) for line in result.stdout.splitlines(): if line.startswith("CMAKE_BINARY_DIR:PATH="): return line.split("=", 1)[1].strip() return None # 调用示例 build_dir = get_build_dir_via_cmake(".")
4. 显式指定构建目录(最简单方案)
如果你的CMake构建是手动触发的,直接显式指定构建目录(比如cmake -S . -B ./my_build_dir),Python脚本即可直接使用这个预先约定好的路径,无需动态查询。
内容的提问来源于stack exchange,提问作者SarahJuliet1510
相关产品推荐
相关产品推荐

