首页 > 解决方案 > 如何为相同的预处理器变量编译 C++

问题描述

在 main.c ++ 中,我定义了几个预处理器变量。

#ifndef FIRST
#define FIRST "./path/for/output/files"
#endif
#ifndef SECOND
#define SECOND 0.0125 
#endif
#ifndef THIRD
#define THIRD "./input_file.mesh"
#endif

我必须通过改变三个预处理器宏来编译这个 .cpp。为此,我尝试使用 for 循环制作一个 bash 文件,以改变这些宏采用的值,即:

#!/bin/bash

for i in  *.mesh
do
  g++ -Ofast -fopenmp main.cpp eig3.cpp vema.cpp -o main10 -DFIRST=\"\.\/$i\" -DSECOND=0.0125 -DTHIRD=\'\"\.\/$i\"\'
done

此循环不断报告错误,它不识别输入文件,也不识别输出文件夹。我想我犯了很多错误,我是 C++ 的新手,我还是有点迷茫。

我想知道是否有可能用每个参数的许多不同值来编译这段代码。谢谢!

标签: c++bashcompiler-errorsmacrosc-preprocessor

解决方案


如果您真的不想对程序进行太多更改,请按如下方式编译一次:

g++ -Ofast -fopenmp main.cpp eig3.cpp vema.cpp -o main10 -DFIRST='getenv("OUTPUT")' -DSECOND=0.0125 -DTHIRD='getenv("INPUT")'

并调用如下:

for i in *.mesh; do
  INPUT=./$i OUTPUT=./path/for/output/files ./main10 
done

推荐阅读