如何为CMAKE ExternalProject_Add_Step设置PATH环境变量?
解决方法
方案1:使用STEP_ENVIRONMENT参数(CMake 3.15+ 支持,推荐)
ExternalProject_Add_Step支持STEP_ENVIRONMENT参数,可以自定义该步骤运行时的环境变量,你可以直接把depot_tools路径追加到PATH最前面,这样不仅fetch命令能被找到,fetch运行过程中调用的其他depot_tools里的工具也能正常识别。
跨平台适配写法如下:
ExternalProject_Get_Property(${PROJECT_NAME} SOURCE_DIR) # 根据平台选择PATH分隔符 if(WIN32) set(PATH_SEP ";") else() set(PATH_SEP ":") endif() ExternalProject_Add_Step( ${PROJECT_NAME} fetch-webrtc COMMAND fetch --nohooks webrtc DEPENDEES mkdir-webrtc # 把depot_tools目录放在PATH最前面 STEP_ENVIRONMENT "PATH=${SOURCE_DIR}${PATH_SEP}$ENV{PATH}" )
方案2:全局配置所有步骤的环境变量
如果你后续的所有WebRTC构建步骤都需要用到depot_tools里的工具,可以直接在定义ExternalProject的时候就配置好全局环境变量,不用每个步骤单独加:
if(WIN32) set(PATH_SEP ";") else() set(PATH_SEP ":") endif() ExternalProject_Add( ${PROJECT_NAME} GIT_REPOSITORY https://chromium.googlesource.com/chromium/tools/depot_tools.git CONFIGURE_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" # 全局配置环境变量,所有后续自定义步骤都会继承这个PATH # <SOURCE_DIR>是ExternalProject内置占位符,会自动替换为depot_tools的源码目录 BUILD_ENVIRONMENT "PATH=<SOURCE_DIR>${PATH_SEP}$ENV{PATH}" )
方案3:低版本CMake兼容方案
如果你用的CMake版本低于3.15,不支持上述环境变量参数,可以直接把PATH修改逻辑包装到COMMAND里:
ExternalProject_Get_Property(${PROJECT_NAME} SOURCE_DIR) if(WIN32) ExternalProject_Add_Step( ${PROJECT_NAME} fetch-webrtc COMMAND set PATH=${SOURCE_DIR};%PATH% && fetch --nohooks webrtc DEPENDEES mkdir-webrtc ) else() ExternalProject_Add_Step( ${PROJECT_NAME} fetch-webrtc # 注意此处$$PATH是为了避免CMake在配置阶段提前展开变量,留到构建执行shell时再展开 COMMAND export PATH=${SOURCE_DIR}:$$PATH && fetch --nohooks webrtc DEPENDEES mkdir-webrtc ) endif()
内容的提问来源于stack exchange,提问作者dbotha
相关产品推荐
相关产品推荐

