WSL环境下CMake调用LibreOffice转ODT为PDF无输出问题求助
处理WSL与Windows的路径兼容问题
因为你在WSL里调用的是Windows版LibreOffice(soffice.exe),Linux格式的路径会被Windows程序识别失败。必须用wslpath工具把路径转换成Windows格式:
修改add_custom_command里的转换命令,把输出目录和源文件路径都转成Windows可识别的格式:COMMAND "${SOFFICE}" --headless --convert-to pdf --outdir "$(wslpath -w ${CMAKE_CURRENT_BINARY_DIR})" --convert-images-to jpg "$(wslpath -w ${CMAKE_CURRENT_SOURCE_DIR}/${A})"验证
SOFFICE变量的有效性
先在WSL终端直接执行"${SOFFICE}" --version,确认能正常调出LibreOffice版本信息。如果不行,检查变量是否指向正确路径——比如Windows下LibreOffice的路径在WSL里应该是/mnt/c/Program Files/LibreOffice/program/soffice.exe这类格式,别写错路径或者漏加引号(路径有空格必须加引号)。清理LibreOffice残留进程
LibreOffice的无头模式经常会因为残留进程卡住,导致转换没反应但不报错。在WSL终端执行这条命令杀掉所有相关进程:taskkill /im soffice.exe /f杀完再重新跑make试试。
查看详细执行日志
执行make VERBOSE=1,看实际跑的命令是什么,检查路径、参数有没有错。同时留意终端里的错误输出,LibreOffice转换失败时通常会输出具体原因,比如文件找不到、权限不够之类的。检查目录权限与位置
别用WSL的家目录(~/xxx)作为构建目录,这类路径转换成Windows格式后容易出现权限问题,Windows程序可能写不进去。换成挂载的Windows磁盘目录,比如/mnt/c/你的项目目录/build,确保WSL和Windows都能读写这个目录。先手动测试转换命令
先在WSL终端手动跑一次转换命令,确认能生成PDF再整合到CMake里。比如:"/mnt/c/Program Files/LibreOffice/program/soffice.exe" --headless --convert-to pdf --outdir "$(wslpath -w ./build)" --convert-images-to jpg "$(wslpath -w ./test.odt)"手动测试成功后,再把对应的参数复制到CMake的命令里。
内容的提问来源于stack exchange,提问作者GSKI

