2017-04-05 75 views
0

我正在重复使用c项目的一些结构。该项目使用auto/preincluded标头和一些类型定义。这意味着没有电话:如何定义qmake的类型?预包含头文件?

#include "architecture.h" 

在相关的源文件中。

我试图修复这与QT PRI文件中定义类型:

DEFINES += int8_t="\"signed char\"" 
DEFINES += uint8_t="\"unsigned char\"" 
DEFINES += int16_t="\"signed int\"" 
DEFINES += uint16_t="\"unsigned int\"" 
DEFINES += int32_t="\"signed long int\"" 
DEFINES += uint32_t="\"unsigned long int\"" 

我得到的编译器错误“重复签”,“多种类型在一个声明”,...

有关于类型的一些事情,并在typedef vs define定义。

有没有更好的方法来解决这个案件与自动包含? 如何解决这个问题?

+0

为什么要在[标准的''头文件](http://en.cppreference.com/w/cpp/header/cstdint)中创建类型的重复项? –

+0

因为这不包括在我想使用的一些来源中。这些类型是目标相关的,并由嵌入式设备的基础项目中自动包含的“architecture.h”定义。但我不知道如何强制使用qmake在qt项目中包含这样的内容。 – urkon

+2

如果您使用的是GCC(或Clang),那么您可以使用'-include'选项从构建命令行强制包含头文件。阅读[GCC手册](https://gcc.gnu.org/onlinedocs/)了解更多信息。 –

回答

1

使用DEFINES +- xyz_t="...."与qt的类型定义包含系统头文件,如Qt Objects使用的<cstdint>

gcc兼容编译器(gcc,MinGW,clang)有选项-include <file>强制preinclude。

在qmake的此可用于通过QMAKE_CXXFLAGS

QMAKE_CXXFLAGS += -include path/to/file.h 

在包括file.h我们可以包括像其他系统类型定义标头:

#include <stdbool.h> 
#include <cstddef> 

这样类型是公和安全地限定。

+0

等效的Visual Studio编译器选项是['/FI'](https://msdn.microsoft.com/en-us/library/8c5ztk84.aspx)。 – Angew