daniel
daniel

Reputation: 23

run cmake with a txt file

When I run my C++ program I need it to open a text file stored in my root directory. How can I make CMake to execute the program I have written with the text file?

When I build my program with Makefile alone, I use the command

./"executable" src/"txt file"

Upvotes: 0

Views: 761

Answers (1)

bremen_matt
bremen_matt

Reputation: 7349

Honestly, by far the simplest would be to just modify your main function. As it stands you main function must be grabbing the filename from the command line arguments. Something like this:

#include <iostream>

int main(int argc, char *argv[]) {
  const auto filename = argv[1];

  // Do stuff with filename
  std::cout << filename;
  return 0;
}

What you probably should do is to just modify that file to use some default filename when no argument is provided:

#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;
}

Depending on how complicated you want to get, you could also let that filename be specified in your CMakeLists. Just add a definition like

set(DEFAULT_FILENAME "/root/something.txt")
target_compile_definitions(my_target PRIVATE "DEFAULT_FILENAME=\"${DEFAULT_FILENAME}\"")

and then take the filename like a macro in your main function:

#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;
}

To summarize... It sounds like you want to have one executable to be built with the filename into it. The aforementioned approaches will accomplish that.

However, there is a much simpler solution... just create a script that runs the file you want. For example, just throw your code

./"executable" src/"txt file"

into a script run.sh

Then make that script runnable (assuming Linux) with

chmod +x run.sh

and just run that script:

./run.sh

Upvotes: 2

Related Questions