仅使用生成文件动态编译选定的文件
compile only selected files dynamically using makefile
我想知道是否有办法使用 makefile 进行动态编译。 假设我有a.cpp
、b.cpp
和c.cpp
文件。这些是我想比较其运行时的一些算法。 首先,我只想编译 a 和 b 文件,然后执行以查看结果。 接下来,我想编译 b 和 c 并运行。
它不仅仅是一个订单,a和b可以编译或b和c,或a和c或(a,b和c(一起编译。
我可以使用生成文件执行此操作吗?
不确定如何"比较"运行时,因此此示例仅通过time
命令打印它们,但如果需要,您可以使用 awk 和 gnuplot 生成绘图。每个目标只需指定要运行的 shell 命令。%
用于根据模式定义目标。
all: ab bc
%.out: %.cpp
gcc $< -o $@
ab: a.out b.out
time ./a.out && time ./b.out
bc: b.out c.out
time ./b.out && time ./c.out
(确保缩进是制表符(
是的,这只是依赖排序的问题:它看起来像:
all: results_ab results_bc
#compare results...
results_ab: a.o b.o
# link, and run, and store results
results_bc: results_ab b.o c.o
# link, run and store results.
虽然编译器和生成文件可能会用于执行此操作,但 Id 建议您不要这样做。重组您的程序。
例如,我猜你有喜欢test_runner.cpp
,algorithm_a.cpp
和algorithm_b.cpp
?
例如,制作一个模板函数来测试算法。然后将其用于每个实现。
template<class T> void test_implementation() { ... do stuff with T to test it ... }
void main()
{
test_implementation<A>();
test_implementation<A>();
}
所以首先,将它们变成一个程序进行测试有什么不好?然后,您可以按顺序运行和计时这两种算法,或者您可以使用命令行参数?
或者,如果您认为test_runner.cpp
是一个库,那么您要测试的两个算法是单独的程序,只是使用该库。
还要花一些时间来学习生成文件语法。一旦你理解了语法解决方案应该是显而易见的,但仍然不是你应该应用于这种情况的东西。
相关文章:
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- 如何使用命令提示符、记事本和 MinGW 使用主文件、头文件和实现文件编译C++程序?
- 无论如何可以将webm / mp4文件编译/记忆为.exe程序吗?(C++)
- 从生成文件编译错误:"Unable to open output file" ..."No such file or directory"
- 如何使用 GLFW 预编译的二进制文件编译 Visual Studio 2019 发布版本
- Arduino IDE中自定义库类的.h文件编译错误的原因是什么
- makefile和错误将与大型项目分开的文件编译
- 如何使用生成文件编译具有多个目录的 c++ 项目
- 我可以将Visual Studio 2015头文件编译成dll并在VS2013中使用它吗?
- 使用Bazel将C 文件编译为python.h
- 使用 .a 文件编译简单的C++文件
- OpenCV 3.2 文件编译
- 如何从多个 cpp 文件编译 WebAssembly
- 从多个文件编译可以"undefined reference"
- 使用静态依赖性为共享二进制文件编译语法需要更加清晰
- 将Gsoap Src文件编译到我的项目中
- 如何用多个文件编译make下的dlib
- 字段的类型不完整,从多个文件编译
- 强制将特定文件编译为Objective-C/文件类型,但将整个项目编译为Objective C++
- OpenGLES 标头(包括 Availability.h)可防止 CPP 文件编译