能否在CMake同一自定义目标中为不同命令设置不同工作目录?
为CMake自定义目标中的不同命令指定独立工作目录
完全可以仅通过CMake实现需求。CMake的add_custom_target支持为每条COMMAND单独配置WORKING_DIRECTORY参数,无需全局统一设置工作目录。
修改你的自定义目标代码如下:
add_custom_target(run_projects COMMAND first_project & WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} # 为first_project指定根目录作为工作目录 COMMAND second_project WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/second_project # 为second_project指定子目录作为工作目录 COMMAND killall first_project &> /dev/null & COMMAND killall second_project &> /dev/null )
核心说明:
- 每条
COMMAND后紧跟的WORKING_DIRECTORY仅对当前命令生效,不会影响其他命令的工作路径。 - 全局的
WORKING_DIRECTORY会作为未单独配置的命令的默认路径,这里我们给两个可执行程序分别指定路径后,无需保留全局设置。 killall命令的工作目录不影响其功能,因此无需额外配置。
修改后,first_project会在项目根目录运行,可正常访问resources/下的资源;second_project会在${PROJECT_SOURCE_DIR}/second_project目录运行,对应访问second_project/resources/下的资源。
内容的提问来源于stack exchange,提问作者a.wise
相关产品推荐
相关产品推荐

