C++ 错误 : expected primary-expression before ‘;’ token using Cmake

标签 c++ cmake g++ cmake-gui

我使用 Cmake 来定义文件夹路径

我有 Config.in.h 文件,其中 #cmakedefine 声明为

#cmakedefine CAFFE_MODEL_PATH
#cmakedefine CAFFE_MODEL_PATH
#cmakedefine CAFFE_TRAIN_MODEL
#cmakedefine MEAN_FILE
#cmakedefine LABEL_FILE

在我的CMakeLists.txt中,我做了

set(CAFFE_MODEL_PATH "" CACHE PATH "Path to a Caffe model")
set(CAFFE_TRAIN_MODEL "" CACHE PATH "Path to a trained model")
set(MEAN_FILE "" CACHE PATH "Path to the mean file all trained images")
set(LABEL_FILE "" CACHE PATH "Path to the mean file all trained images")
configure_file (
  "${PROJECT_SOURCE_DIR}/Config.h.in"
  "${PROJECT_SOURCE_DIR}/Config.h"
)

因此 Config.h 为那些 CAFFE_MODEL_PATH、CAFFE_TRAIN_MODEL、MEAN_FILE、LABEL_FILE 设置了#define。

但是当我在我的 main.cpp 文件中使用它们时

int main(void) {

    ::google::InitGoogleLogging("endtoenddetection");

    string model_file   = CAFFE_MODEL_PATH;
    string trained_file = CAFFE_TRAIN_MODEL;
    string mean_file    = MEAN_FILE;
    string label_file   = LABEL_FILE;
}

我有错误

/home/Softwares/ReInspect/endtoendLstm/main.cpp:8:43: error: expected primary-expression before ‘;’ token
     string model_file   = CAFFE_MODEL_PATH;
                                           ^
/home/Softwares/ReInspect/endtoendLstm/main.cpp:9:44: error: expected primary-expression before ‘;’ token
     string trained_file = CAFFE_TRAIN_MODEL;
                                            ^
/home/Softwares/ReInspect/endtoendLstm/main.cpp:10:36: error: expected primary-expression before ‘;’ token
     string mean_file    = MEAN_FILE;
                                    ^
/home/Softwares/ReInspect/endtoendLstm/main.cpp:11:37: error: expected primary-expression before ‘;’ token
     string label_file   = LABEL_FILE;

最佳答案

configure_file时,表达式

#cmakedefine CAFFE_MODEL_PATH

实际上是一个条件宏定义。也就是说,仅当相应的 CMake 变量被评估为 no-false(根据 if(constant) 规则)时才定义宏。

在您的情况下,CMake 变量具有 值,这些值被评估为 false。这样配置的文件(Config.h 在你的例子中)不包含宏定义

如果你想用字符串值定义宏,使用

#define CAFFE_MODEL_PATH "@CAFFE_MODEL_PATH@"

这样即使对应的变量为空,宏也会被正确定义。

另见 documentation用于 configure_file 命令。

关于C++ 错误 : expected primary-expression before ‘;’ token using Cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42198870/

相关文章:

c++ - 如果引入了语句,那么在哪个版本的C++中用逗号将多行分开,使用它有什么不利之处?

c++ - IAR 编译器中的指针

c++ - CMake:使用 target_sources() 添加当前目录和子目录中的所有文件

c++ - (OpenCV4.1)/usr/bin/ld : cannot find -lopencv_nonfree

c++ - 如何将 cMessage 类型转换为消息定义类型

c++ - 什么是严格的别名规则?

c++ - 如何在 Windows 上备份 cmake gui 的生成器缓存/设置?

c++ - 在构造函数中复制 __m256d 会导致段错误

C++ VS17 给出与 Linux 子系统中相同代码不同的输出

gcc - 该程序无法找到正确版本的 glibc/libstdc++,尽管它是静态链接的