Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Makefile中重用目标?_C++_Linux_Makefile - Fatal编程技术网

C++ 如何在Makefile中重用目标?

C++ 如何在Makefile中重用目标?,c++,linux,makefile,C++,Linux,Makefile,基本上,我想让这段代码在fileMakefile中可执行: targ: file1.cpp g++ file1.cpp -o file1 targ: file2.cpp g++ file2.cpp -o file2 targ: file3.cpp g++ file3.cpp -o file3 我知道我可以把它组合成这样的东西: targ: file1.cpp file2.cpp file3.cpp g++ file1.cpp -o file1 g++

基本上,我想让这段代码在fileMakefile中可执行:

targ: file1.cpp
    g++ file1.cpp -o file1

targ: file2.cpp
    g++ file2.cpp -o file2

targ: file3.cpp
    g++ file3.cpp -o file3
我知道我可以把它组合成这样的东西:

targ: file1.cpp file2.cpp file3.cpp
    g++ file1.cpp -o file1
    g++ file2.cpp -o file2
    g++ file3.cpp -o file3

但是我希望它只在更新相应的文件时运行相应的行。我该怎么做?提前谢谢。

您必须正确建立关系

例如:

targ: file1 file2 file3

file1: file1.cpp
    g++ file1.cpp -o file1

file2: file2.cpp
    g++ file2.cpp -o file2

file3: file3.cpp
    g++ file3.cpp -o file3
也就是说:


如果您想构建
target
(您也应该将其设置为假的),请确保您将构建
file1
file2
file3
。对于这一点,你有明确的规则。就这样

在makefile规则中,您在
左侧放置的任何内容都是运行以下命令的结果。在您的示例中,您说,
targ
产品是以三种不同的方式制造的,这令人困惑,因为创建
targ
的方式不明确。您可能想说的是,为了成功构建
targ
,您需要创建三个可执行文件
file1
file2
file3
,每个文件都是使用相应的
.cpp
文件构建的

为此,你可以依赖于。对于C++可执行文件,隐式配方将查找具有相同名称的<代码> .O/COD>文件,对于该代码> O./C>文件,它将查找包括“代码> > CPP < /代码> .< 所以基本上像这样的东西就足够了:

CXX=g++
targ: file1 file2 file3

隐式配方使用<代码> CXX/CODE >定义C++编译器,<代码> CPPPFLAGs/COD>定义预处理器标志(<代码> -I/COD>,<代码> -D/COM>等)编译器和链接标志>代码> CXXFLACK< <代码> LDFLAGs<代码>,以及链接到什么代码库>代码> LDLBS < /P> 如果不想依赖隐式规则,可以创建模式配方并使用:

target: file1 file2 file3

%: %.cpp
  g++ $^ -o $@