【问题标题】:Having CMake include_directories SYSTEM dirs prefix with equals character (=)让 CMake include_directories SYSTEM dirs 前缀带有等号字符 (=)
【发布时间】:2014-06-18 14:41:44
【问题描述】:

有没有办法让 CMake include_directories 包含带有等于(=)字符的系统目录前缀?这样我就可以让 gcc 为关联的目录添加前缀 -isysroot 标志以进行交叉编译。

当我尝试包含带有 equals(=) 前缀的路径时,假定相对路径和前缀带有当前源路径:

include_directories(AFTER SYSTEM "=/usr/include")

结果:

-isystem /root/opencv-2-4-9/opencv/modules/highgui/=/usr/include/

我的期望是:

-isystem=/usr/include/

【问题讨论】:

    标签: gcc cmake


    【解决方案1】:

    我检查了 CMake 的源代码(2.8.12.2 和 3.0.0);似乎 CMake 在非 Windows 系统中添加了当前源目录所有不以“/”开头的路径。

    唯一的例外是生成器表达式。如果路径以“$

    include_directories(AFTER SYSTEM "$<1:=>/usr/include")
    

    生成

    -isystem =/usr/include/
    

    这似乎至少适用于 CMake 3.0.0。当然,您应该为 gcc 设置 CMAKE_SYSROOT 以使用正确的路径作为前缀。

    set(CMAKE_SYSROOT /usr/arm-linux-gnueabi)
    

    【讨论】:

      【解决方案2】:

      在一个命令中将其设置在一起:

      set_target_properties(<targetname> PROPERTIES COMPILE_FLAGS "-isystem=/usr/include/")
      

      【讨论】:

      • 当然有一些替代解决方案。我已经开发了一些来成功构建。例如;将 CMAKE_INCLUDE_SYSTEM_FLAG_C 和 CMAKE_INCLUDE_SYSTEM_FLAG_CXX 设置为“-isystem=”也可以。
      • 我的问题是我们可以用 include_directories 做到这一点吗?由于 CMAKE 支持通过 CMAKE_SYSROOT 添加 -isystem 包含和 --sysroot 标志,逻辑上应该支持添加带有“=”前缀的路径。不然CMAKE_SYSROOT就没用了,是不是我错了?
      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2016-03-24
      • 2015-04-28
      • 1970-01-01
      • 2017-04-29
      相关资源
      最近更新 更多