Я использовал Cmake
для определения folder paths
.Ошибка C++: ожидаемое первичное выражение перед ';' токеном с использованием 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
имеет #define для тех CAFFE_MODEL_PATH, CAFFE_TRAIN_MODEL, MEAN_FILE, LABEL_FILE
.
Но когда я использую их в моем файле 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;
У вас есть '#include" Config.h "' в 'main.cpp'? – Barmar
'Так что у Config.h есть #define для них' - я думаю, у него есть'/* #undef VAR */'для всех ваших макросов (то есть ** вообще не определяет их **). Это связано с тем, что содержимое соответствующих переменных в CMake равно * empty *, которое оценивается CMake как * false *. См. [Документация] (https://cmake.org/cmake/help/v3.7/command/configure_file.html) для команды 'configure_file'. Если вы хотите определить макрос с (возможно, пустым) строковым значением, используйте '#define CAFFE_MODEL_PATH" @ CAFFE_MODEL_PATH @ "' в вашем файле 'Config.h.in'. – Tsyvarev
Да, я включаю «Config.h» в main.cpp – batuman