【问题标题】:How to tell CMake to use relative paths如何告诉 CMake 使用相对路径
【发布时间】:2017-08-24 08:45:20
【问题描述】:

如果我制作我的项目,我可以看到:

[ 50%] Building C object CMakeFiles/hello.dir/hello.c.obj
/cygdrive/c/users/me/Home/bin/iccarm  /cygdrive/c/users/me/Home/sandbox/iar/hello.c  -I/cygdrive/c/users/me/Home/sandbox/iar/foo -I/cygdrive/c/users/me/Home/inc   -o CMakeFiles/hello.dir/hello.c.obj

既然我总是在我的build 目录中调用make,为什么不使用相对路径来实现跨操作系统的可读性和兼容性?

[ 50%] Building C object CMakeFiles/hello.dir/hello.c.obj
iccarm  hello.c -Ifoo -Iinc -o CMakeFiles/hello.dir/hello.c.obj

是不是好多了?

有没有办法强制 CMake 尽可能使用相对路径?

【问题讨论】:

    标签: cmake


    【解决方案1】:

    CMake 总是使用绝对路径。这是概念的一部分。因此,您不能移动生成的构建环境文件,也不能移动例如将它们置于源代码控制之下或使冗长的输出更漂亮(您可以稍微玩一下here 之类的规则消息)。

    曾经有CMAKE_USE_RELATIVE_PATHS,但文档显示:

    此变量无效。在 CMake 3.4 中删除了它在以前版本中部分实现的效果。

    参考文献

    【讨论】:

    • 所以这意味着CMake 在 Cygwin 上不能正常工作。这是一个非常悲伤的消息。我想知道为什么他们删除了 CMAKE_USE_RELATIVE_PATHS 它只是完美的......
    • @nowox Cygwin 仅适用于 cygwin 版本的 CMake。它不适用于 Windows 版本。而且我认为它被删除是因为它引起了很多问题(CMake bugtracker 充满了它)。
    • 哪个被删除了? windows版还是cygwin版?绝对路径的主要问题是,如果您使用为 Windows 构建的工具链,编译器需要 Windows 路径。只要路径是相对的,它就可以与 Cygwin 一起使用,但是一旦获得绝对路径,就必须编写一个绑定脚本,将丑陋的 /cygwin/c/ 东西替换为 C:\... 如果 CMake 有一个选项,我会很好即时执行此操作
    • @nowox 抱歉,我的意思是 CMAKE_USE_RELATIVE_PATHS 变量已被删除,因为它有很多问题。
    • 好吧,拥有绝对路径对我来说是正确的痛苦。我无法移动我的源目录?这是什么优势?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2020-05-28
    相关资源
    最近更新 更多