我正在Ubuntu中用cmake编写一个C ++程序,它使用joystick.h
中的头文件/usr/include/linux
。默认情况下,如果我使用make
,joystick.h
似乎无法在默认目录中找到#include <joystick.h>
。因此,我将行include_directories (/usr/include/linux)
添加到CMakeLists.txt
以启用此标题。
问题是,我现在遇到各种错误,例如error: redefinition of ‘struct timeval’
和error: redefinition of ‘struct timezone’
。这似乎是因为time.h
和/user/include
中都有一个标题/usr/include/linux
。这些文件中的标题保护分别为#ifndef _TIME_H
和#ifndef _LINUX_TIME_H
。因此,我能想到的唯一解决方案是在源代码中将路径硬编码为joystick.h
。
因此,在我看来,由于这些重新定义问题,/usr/include/linux
永远不应该添加到搜索路径中。它是否正确?我的解决方案是硬编码最好的路径吗?
答案 0 :(得分:2)
除非有理由不(我可能会这样),否则在源文件中使用#include <linux/joystick.h>
似乎是最简单的解决方案。