如何将参数从Makefile传递给程序?

时间:2018-01-15 10:43:22

标签: c makefile directory parameter-passing

我想将Makefile的目录传递给函数。

例如:

生成文件

$(DIR) = makefile directory

程序

int main(int argc,char argv[]) char directory = argv[1]

我该怎么做?

EDIT Clarificaion。我希望我的应用程序在我编译它的目录之外工作。

2 个答案:

答案 0 :(得分:0)

在编译时传递符号是使用-D选项完成的 (例如C ++,但你可以轻松转置到C)。您可以只定义符号,也可以给它一个值(这就是你想要的)。

DIR=$(shell pwd)
mytarget: 
    @echo "DIRECTORY=$(DIR)"
    $(CXX) mysource.cpp -D"DIRECTORY=$(DIR)" -o mysource

然后,在源文件中,符号DIRECTORY将保留路径。要检查这一点,您需要一个额外的技巧(称为"双重扩展"):

#define STR1(x)  #x
#define STR(x)  STR1(x)
#include <iostream>
int main()
{
    std::cout << "directory is " << STR(DIRECTORY) << "\n";
}

您可以查看关于D标志的this similar questionsee here

答案 1 :(得分:0)

如果您需要传递的目录是静态的(即始终相同),您可以使用-D C编译器选项:

cc -DDIRECTORY=/home/user/...

在您的C源代码中,您可以使用DIRECTORY