我在C ++中有以下代码
if (should_run_make) {
std::string make = "make -C ";
make.append(outdir);
std::cout << "Make cmd is " << make << std::endl;
system(make.c_str());
}
报告以下内容:
make cmd is make -C / home / hamiltont / temp / make:输入目录
/home/hamiltont/temp' make: *** No targets. Stop. make: Leaving directory
/家/ hamiltont / TEMP'
然而,手动操作可以多种方式正常工作,例如
[hamiltont@4 generator]$ make -C /home/hamiltont/temp/
make: Entering directory `/home/hamiltont/temp'
g++ -O3 -I/usr/include/openmpi-x86_64 -L/usr/local/lib -L/usr/lib64/openmpi/lib -lmpi -lmpi_cxx -lboost_serialization -lboost_mpi stg_impl.cpp -o impl
make: Leaving directory `/home/hamiltont/temp'
[hamiltont@4 generator]$ cd /home/hamiltont/temp/
[hamiltont@4 temp]$ make
g++ -O3 -I/usr/include/openmpi-x86_64 -L/usr/local/lib -L/usr/lib64/openmpi/lib -lmpi -lmpi_cxx -lboost_serialization -lboost_mpi stg_impl.cpp -o impl
答案 0 :(得分:6)
您是否在C程序中生成makefile?这是我能想象的唯一原因会导致特定的错误信息。
make: *** No targets. Stop.
以下是我如何生成该消息:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp = fopen("Makefile", "w");
fputs("all:\n\techo Done.\n", fp);
system("make");
fclose(fp);
return 0;
}
这可以预见,打印出来:
make: *** No targets. Stop.
我可以预见地说因为Makefile
将是空的!这是因为IO被缓冲了......
所以,我在调用system()
之前关闭文件,这会刷新缓冲区(fflush()
也会这样做):
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp = fopen("Makefile", "w");
fputs("all:\n\techo Done.\n", fp);
fclose(fp);
system("make");
return 0;
}
输出:
echo Done. Done.
为了清楚起见,我使用了C的IO功能,但同样的规则适用于<iostream>
。