CMake外部构建目录配置问题:构建文件未生成到指定目录
问题:CMake外部构建未生成文件到指定目录
我有一个简易的CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.15) project(Test_documentation) find_package(Doxygen) if (Doxygen_FOUND) find_file(DOXYGEN_PLANTUML_JAR_PATH plantuml.jar $ENV{PLANT_UML_JAR_PATH} /usr/share/plantuml ) endif (Doxygen_FOUND)
(原本内容更多,但为排查问题已精简。)
我希望在Windows系统执行外部构建(out-of-source build),尽管其中一个plantuml搜索路径是Linux相关的。
执行命令:
PS D:\cmaketest> cmake D:\repos\My\far\away\project\Doc\CMakeLists.txt .... -- Build files have been written to: D:/repos/My/far/away/project/Doc
但D:\cmaketest目录中未生成任何内容,我希望构建文件生成在此目录,且源码目录Doc保持不变。Doc目录中无其他CMake相关文件,请问我的操作哪里出错了?
解决方法
你的操作错在直接指定了CMakeLists.txt文件的路径,CMake遇到这种情况会默认把构建文件生成到该文件所在的源码目录(也就是Doc目录),不会使用当前工作目录。
要实现外部构建,正确的命令分两种情况:
方法1:使用CMake 3.14+推荐的参数(更清晰)
PS D:\cmaketest> cmake -S D:\repos\My\far\away\project\Doc -B .
-S:指定包含CMakeLists.txt的源码目录-B:指定要生成构建文件的构建目录(.代表当前所在的D:\cmaketest)
方法2:兼容CMake 3.13及更早版本
确保当前终端在D:\cmaketest目录,直接指定源码目录路径(不要指定到具体的CMakeLists.txt文件):
PS D:\cmaketest> cmake D:\repos\My\far\away\project\Doc
这样CMake会自动在当前目录生成所有构建文件,不会改动源码目录的内容。
另外提一句:那个Linux风格的路径/usr/share/plantuml在Windows下不会造成问题,CMake会自动跳过不存在的搜索路径,不影响构建流程。
内容的提问来源于stack exchange,提问作者adrianmcmenamin
相关产品推荐
相关产品推荐

