繁体   English   中英

如何在Linux的/ usr / include中强制cmake使用C ++头文件?

[英]How can I force cmake to use C++ header files in /usr/include in Linux?

我有一个cmake项目,该项目使用安装在/usr/include的标头,我们将其称为freeglut.h 当我使用find_package(GLUT)我会得到${GLUT_INCLUDE_DIR}指向/usr/include 很好

现在,我添加了CUDA,它在find_package(CUDA)随附的路径之一中保留了这些标题和其他标题的副本。 通常,我可以通过在include_directories() ${CUDA_INCLUDE_DIRS} ${GLUT_INCLUDE_DIR}放在${GLUT_INCLUDE_DIR}之前来解决此问题。 但是,在Unix系统上,cmake在UnixPaths.cmake中维护一个名为CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIESlist ,该list包含/usr/include并显然使cmake不会为目录/usr/include的编译器发出-I<dir>参数,这意味着编译器首先搜索CUDA路径,并使用在那里找到的freeglut.h标头。

我尝试使用list(REMOVE_ITEM ...CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES列表中删除/usr/include ,但这并没有改变cmake生成的编译器命令。

我当然可以开始使用CUDA安装,删除不需要的头文件,或修改CUDA_INCLUDE_DIRS变量,但是有一种干净的方法告诉cmake首先使用系统头文件(如果存在)吗?

我想-idirafter标志应该可以帮助您:

-idirafter目录

在dir中搜索头文件,但是在用-I指定的所有目录和标准系统目录用完后执行此操作。 dir被视为系统包含目录。

https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

您可以像这样使用它来降低CUDA包含目录优先级:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -idirafter /usr/include/<CUDA_includes>")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM