如何在Godbolt中读取Isource.json并生成Osource.json(非CMake项目)
在Godbolt上实现读/写JSON的C项目(不用CMake,用g Makefile)
我想基于Godbolt的示例修改项目,实现读取Isource.json输入文件并写入Osource.json,所有JSON文件都存在Godbolt的项目内。目前我的代码在本地Windows的Visual Studio能正常编译运行,但在Godbolt上无法编译,也不知道怎么在Godbolt里创建Isource.json文件。
我的代码如下:
#include <boost/json.hpp> using namespace boost::json; #include <boost/filesystem.hpp> using namespace boost::filesystem; #include <vector> #include <iostream> #include <fstream> int main() { std::string fname = "Isource.json"; //Read JSON file and store in json::object const path fileName(fname); object obj; std::ifstream file(fname); std::string content(std::istreambuf_iterator<char>{file}, std::istreambuf_iterator<char>{}); value jv = parse(content); obj = jv.as_object(); file.close(); //Output to OSource.json fname = "Osource.json"; std::ofstream ofile(fname); ofile << boost::json::value_from(obj); ofile.close(); }
需求明确:
- 不使用CMake,采用标准传统g++ Makefile构建
- 解决Godbolt上的编译失败问题
- 学会在Godbolt中创建
Isource.json输入文件 - 让Godbolt生成可直接查看的
Osource.json输出文件
一、解决Godbolt编译报错问题
Godbolt的g++环境默认不会自动链接Boost库,需要手动指定编译参数:
- 编译时需链接Boost的
json和filesystem库,且C标准至少指定为C17(Boost.Json依赖C++17特性) - 在Godbolt的「Compiler Options」输入框中填入:
-std=c++20 -lboost_json -lboost_filesystem- 无需添加源文件名,Godbolt会自动识别当前项目中的C++源文件
二、在Godbolt中创建Isource.json输入文件
- 点击编辑器顶部的「Add New File」按钮
- 文件名输入
Isource.json,在文件内写入测试用的JSON内容,比如:
{ "test_key": "demo_value", "num": 12345 }
- 保存后,该文件会和你的C++源文件处于同一项目目录,程序可直接读取
三、编写传统Makefile用于构建
- 新建一个名为
Makefile的文件,内容如下:
CC = g++ CFLAGS = -std=c++20 -Wall LDFLAGS = -lboost_json -lboost_filesystem # 生成可执行文件 all: json_processor json_processor: main.cpp $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) # 运行程序 run: json_processor ./json_processor # 清理生成的文件 clean: rm -f json_processor Osource.json
注意:将main.cpp替换为你实际的C++源文件名
2. 在Godbolt的构建选项中,将默认编译器切换为「Makefile」,系统会自动识别并执行Makefile中的指令
四、查看生成的Osource.json文件
- 执行
make run后,Godbolt的项目文件列表中会出现Osource.json - 直接点击该文件即可查看内容,程序的运行日志可在「Output」面板中查看
内容的提问来源于stack exchange,提问作者Tryer
相关产品推荐
相关产品推荐

