老实说,到目前为止,最简单的方法就是修改你的 main 函数。就目前而言,您的主要功能必须从命令行参数中获取文件名。像这样的:
#include <iostream>
int main(int argc, char *argv[]) {
const auto filename = argv[1];
// Do stuff with filename
std::cout << filename;
return 0;
}
您可能应该做的只是修改该文件以在未提供参数时使用一些默认文件名:
#include <iostream>
int main(int argc, char *argv[]) {
const auto filename = argc < 2 ? "/root/something.txt" : argv[1];
// Do stuff with filename
std::cout << filename;
return 0;
}
根据您想要获得的复杂程度,您还可以在 CMakeLists 中指定该文件名。只需添加一个定义,如
set(DEFAULT_FILENAME "/root/something.txt")
target_compile_definitions(my_target PRIVATE "DEFAULT_FILENAME=\"${DEFAULT_FILENAME}\"")
然后在你的主函数中像宏一样获取文件名:
#include <iostream>
int main(int argc, char *argv[]) {
const auto filename = argc < 2 ? DEFAULT_FILENAME : argv[1];
// Do stuff with filename
std::cout << filename;
return 0;
}
总而言之...听起来您希望构建一个带有文件名的可执行文件。上述方法将实现这一目标。
但是,有一个更简单的解决方案...只需创建一个运行所需文件的脚本。例如,只需抛出您的代码
./"executable" src/"txt file"
写入脚本run.sh
然后使该脚本可运行(假设是 Linux)
chmod +x run.sh
然后运行该脚本:
./run.sh