一张最小的构建表
(本条路线统一用 g++ -std=c++17 -O0 -Wall 编译)⚠️ 判题机上跑不了 cmake,所以这一节练的是**它管的那件事**:**一张"目标 → 要哪些源文件 / 要连哪些别的目标"的表**。会读会写这张表,换到有 cmake 的地方就是几行配置。
#include <iostream>
#include <string>
#include <vector>
/* CMake 说到底就是一张"目标 → 它要哪些源文件 / 要连哪些别的目标"的表。
跑不了 cmake,但这张表本身可以真跑。 */
struct Target {
std::string name;
std::vector<std::string> sources;
std::vector<std::string> links;
};
int main() {
std::vector<Target> ts{
{"calc", {"calc.cpp"}, {}},
{"app", {"main.cpp"}, {"calc"}},
{"tests",{"test.cpp"}, {"calc"}},
};
int total_sources = 0;
int depends_on_calc = 0;
for (const auto &t : ts) {
total_sources += static_cast<int>(t.sources.size());
for (const auto &l : t.links) if (l == "calc") depends_on_calc++;
}
std::cout << ts.size() << "/" << total_sources << "/"
<< depends_on_calc << "\n";
return 0;
}
全部评论