我在源码树中有一个名为“time.h”的文件,正如系统“time.h”一样。 这不能改变。 我遇到了一个cmake的问题,当我使用include_library选项时,它被转换为-I标志,这意味着我的自定义“time.h”优先于系统时间。 这是一个定义不。
我尝试使用include_directories(后dir1 dir2),但它仍然生成-I选项,而不是预期的-idirafter。
Qt / CMake:在标识符'slots'`之前缺less':'
CMake:如何使用add_custom_command(…)中的条件
我怎么知道如果find_package()成功cmake?
用cmake从整个项目中创build一个静态库
使用CMake导入错误编译embedded式Python的C ++
我不认为这是CMake的问题; 我相信gcc总是会在系统之前找到你的“time.h”,无论你在#include使用引号还是括号,而不管include_directories中的各种选项。 请参阅gcc文档中的-I和-isystem条目
CMake的include_directories的AFTER选项仅与gcc命令中列出的目录顺序有关,它与gcc的-idirafter标志-idirafter 。
将自己的文件与系统文件名称相同并不是一个好的计划,但是如果双手捆绑在一起的话,可以避免这个问题,而不必重新命名time.h,因为它可以更充分地为自己的包含路径进行限定。
CMakeLists.txt: include_directories(${PROJECT_SOURCE_DIR}/src) header file: #include <time.h> // we want but don't get system one #include "time.h" // we want and get own custom one
更喜欢的东西
CMakeLists.txt: include_directories(${PROJECT_SOURCE_DIR}) header file: #include <time.h> // we want and get system one #include "src/time.h" // we want and get own custom one
另一种选择是坚持使用当前的#include设置(对于系统time.h使用尖括号,并使用引号),而不要在CMakeLists.txt中使用include_directories 。 相反,我认为你可以用下面的东西代替它:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -iquote ${PROJECT_SOURCE_DIR}/src")
使用-iquote可能是比-idirafter更好的选择,因为-idirafter指定的目录(在这种情况下不正确)被视为系统目录,因此被禁止了警告等。
如果你真的去做这个选择,可能值得评论一下CMakeLists.txt来解释为什么没有include_directories来避免将来的重构恢复使用更普通的include_directories命令。
总而言之,如果可能,最好的选择是重命名你的“time.h”文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。