在程序中读取QT .pro文件

时间:2014-02-14 10:43:49

标签: qt

我想知道在运行时是否有某种方法可以读取QT项目的.pro文件中定义的变量。我想尝试编译cuda,仅用于一个架构(Sm_21),我想决定运行时使用具有该功能的cuda设备。

.pro文件:

QT       += core gui opengl

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = hello-opengl
TEMPLATE = app


SOURCES += main.cpp\
       mainwindow.cpp \
       glwidget.cpp \



HEADERS  += mainwindow.h \
            glwidget.h \



FORMS    += mainwindow.ui


CUDA_ARCH = sm_21           # Type of CUDA architecture

我想在我的.cpp中使用这个CUDA_ARCH变量。例如

if (CUDA_ARCH == sm_21)
  then pick device 0
else
  pick device 1

非常感谢!

2 个答案:

答案 0 :(得分:6)

您可以使用

DEFINES += CUDA_ARCH_SM_21

并在代码中询问

#ifdef CUDA_ARCH_SM_21

我认为不可能在.pro文件中直接创建“全局”变量。但您可以在#ifdef块中设置全局变量CUDA_ARCH

#define CA_SM_21 0
#define CA_SM_OTHER 1
#ifdef CUDA_ARCH_SM_21
  int CUDA_ARCH = CA_SM_21
#elseif
  int CUDA_ARCH = CA_SM_OTHER
#endif

if(CUDA_ARCH == CA_SM_21)...

答案 1 :(得分:3)

您可以在 .pro 中添加具有值的预处理宏:

CUDA_ARCH = sm_21           # Type of CUDA architecture

DEFINES += CUDA_ARCH=$${CUDA_ARCH}

所以这基本等同于将它添加到您的C代码中:

#define CUDA_ARCH sm_21

然后在代码中你可以使用宏,就像你使用任何 #define 一样,例如:

// enum is most convenient way to get the architectures as symbols
enum CudaArchEnum { sm_21, sm_22};

//... initialize a variable
enum CudaArchEnum value = CUDA_ARCH; // value = sm_21;

//.. or from your question
if (CUDA_ARCH == sm_21) {
  // pick device 0
} else {
  // pick device 1
}

你也可以把它作为字符串放到变量中,如下所示:

const char *CudaArchStr = #CUDA_ARCH; // CudaArchStr = "sm_21"