根据 zip 文件制作重建目标
make rebuild target depending on zip file
如果依赖项是二进制文件,为什么 make
重建目标(我想)?
重现:
- 创建(并输入)一个新的空目录
- 下载GameLift SDK(这只是一个例子:这个问题的
Makefile
内容是这个文件的一个例子)
- 使用以下内容创建一个简单的
Makefile
- 多次发出
make
命令
all: GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt
GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt: GameLift_12_22_2020.zip
unzip -oq GameLift_12_22_2020.zip
我原本希望看到 unzip
命令仅在我第一次发出 make
命令时执行,但它会在下一次 make
运行时继续执行。 . 为什么?
有两种可能,我们无法根据您提供的信息判断是哪种情况。
第一次是文件 GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt
不存在于 zip 文件中,所以第二次 make 运行s 它会查看该文件是否存在,但它不存在,所以它重新 运行 规则。如果在同一目录中你 运行 make
,你使用 ls GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt
(在解压缩 运行s 之后)并且你得到“找不到文件”或类似的,这是你的问题。
如果不是,那么问题是 zip 文件中文件的时间戳比 zip 文件本身旧,并且当 unzip 解压缩文件时,它会将时间戳设置为这个较旧的时间。
因此,当 make 开始构建时,它找到了 CMakeLists.txt
文件,但修改时间比 zip 文件早,因此 make 再次解压缩 zip 文件以尝试更新它。
您可以使用 ls -l
查看该文件的修改时间。如果是这种情况,您应该在解压缩文件时触摸该文件,以便它更新:
GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt: GameLift_12_22_2020.zip
unzip -oq GameLift_12_22_2020.zip
touch $@
如果依赖项是二进制文件,为什么 make
重建目标(我想)?
重现:
- 创建(并输入)一个新的空目录
- 下载GameLift SDK(这只是一个例子:这个问题的
Makefile
内容是这个文件的一个例子) - 使用以下内容创建一个简单的
Makefile
- 多次发出
make
命令
all: GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt
GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt: GameLift_12_22_2020.zip
unzip -oq GameLift_12_22_2020.zip
我原本希望看到 unzip
命令仅在我第一次发出 make
命令时执行,但它会在下一次 make
运行时继续执行。 . 为什么?
有两种可能,我们无法根据您提供的信息判断是哪种情况。
第一次是文件 GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt
不存在于 zip 文件中,所以第二次 make 运行s 它会查看该文件是否存在,但它不存在,所以它重新 运行 规则。如果在同一目录中你 运行 make
,你使用 ls GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt
(在解压缩 运行s 之后)并且你得到“找不到文件”或类似的,这是你的问题。
如果不是,那么问题是 zip 文件中文件的时间戳比 zip 文件本身旧,并且当 unzip 解压缩文件时,它会将时间戳设置为这个较旧的时间。
因此,当 make 开始构建时,它找到了 CMakeLists.txt
文件,但修改时间比 zip 文件早,因此 make 再次解压缩 zip 文件以尝试更新它。
您可以使用 ls -l
查看该文件的修改时间。如果是这种情况,您应该在解压缩文件时触摸该文件,以便它更新:
GameLift_12_22_2020/GameLift-SDK-Release-4.0.2/GameLift-Cpp-ServerSDK-3.4.1/CMakeLists.txt: GameLift_12_22_2020.zip
unzip -oq GameLift_12_22_2020.zip
touch $@