64位《操作系统真象还原》makefile文件一键修改

64位《操作系统真象还原》makefile文件一键修改

我在学习《操作系统真象还原》的时候到了需要makefile那里,因为是64位系统所以需要改的地方还是蛮多的,大概要改个三、四处,很是麻烦啊,后来makefile多了起来,实在是不能再手动改了,太麻烦,就写了一个程序。

首先在bochs/bin下创建cm.cpp

image-20210913190221468

这个程序的功能是这样:

  1. 用户输入文件夹路径
  2. 程序将文件夹中的makefile改成我们想要的样子(可直接在64位ubuntu上运行了)

为了让cm能在任何路径下都运行,所以我将它移到了/usr/bin中。

在这里插入图片描述

你可能想到了,哈哈这很麻烦还要手动输入路径,还不如直接copy到那个文件夹呢,可这样每一个文件夹都会有一个拷贝,也很麻烦。

所以我就又写了一个别名:ma

这个别名每次都直接把当前路径(pwd的结果) 当成cm的输入,这样子我们在任意路径下输入mado都可以修改ma啦。具体操作如下图

image-20210913192147556
以后在任何路径下输入ma,就会将makefile改成我们想要的形式啦

cm.cpp代码

#include <fstream>
#include<iostream>
#include<vector>
#include<string>
using namespace std;
const string mypath = "/home/linxi/bochs/bin/"; // 改成你自己的路径

const string file("makefile");
const string CFLAGS ("CFLAGS = -Wall $(LIB) -c -fno-builtin -W -Wstrict-prototypes \\");
const string change_CFLAGS ("-m32 -fno-stack-protector");

const string LDFLAGS("LDFLAGS = -Ttext $(ENTRY_POINT) -e main -Map $(BUILD_DIR)/kernel.map");
const string change_LDFLAGS("-m elf_i386 ");

const string mk_dir("	if [[ ! -d $(BUILD_DIR) ]];then mkdir $(BUILD_DIR);fi");
const string change_mk_dir("	if [ ! -d $(BUILD_DIR) ];then mkdir $(BUILD_DIR);fi");

int main(int argc ,char ** argv)
{
    ios::sync_with_stdio(false);
    string path;
    cin >> path;
    system((string("cd ") + path).c_str());
    ifstream fin(file);
    fin.tie(0);
    string s;
    vector<string> vc;
    while(getline(fin,s)) vc.push_back(s) ;
    ofstream fut(file) ;
    for(auto & s : vc)
    {
        if(s == CFLAGS)
            s.replace(s.find("-fno-builtin") , string("-fno-builtin").size(),change_CFLAGS);
    
        else if(s == LDFLAGS)
            s.insert(s.find("= ") + 2 ,change_LDFLAGS);
        
        else if(s.find("hd60M.img") != -1)
            s = "           of=" + mypath + s.substr(s.find("hd60M"));
        else if(s == mk_dir)
            s = change_mk_dir;

        fut << s << '\n';
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值