Running C++ file on Terminal in Ubuntu - c++

I'm new to C++.
I've created a C++ file with gedit in Ubuntu. But when I tried to run it on terminal, it says
no such file or directory
When I typed ls on Terminal, it shows that the c++ file was not created at all.
Where did I go wrong?
saved a file with .cpp with gedit on my desktop.
Went to terminal and typed something like g++ -o test file name.cpp.
I was then shown an error message of “no such file or directory”.
This is my code:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World\n";
return 0;
}

First you have to find the directory where you saved the source file from gedit. File->Save As is one place which shows the directory, and there probably is also some "file properties" action in that menu which also shows the path. In command line use cd to move to that directory before running your compilation command.
You can use ls to see if the directory contains the files you expect, as you have done. pwd is useful for showing the full path of your current working directory. In general, it would be very useful if you did a Linux terminal tutorial or two, to get the hang of working on unix terminal command line.
Then it looks like you have spaces in your file name here: g++ -o test file name.cpp
It is a bit unclear which is which, but I presume you want this:
g++ -o test 'file name.cpp'
In unixy terminals, the shell (you probably have bash) is responsible for splitting the command line arguments, and this by default happens at whitespaces. If you have white space in single argument (like the file name here), you have to make it so that shell doesn't split that argument into two. There are several ways to do it, single quotes like above is just one, but it is a broad subject and way beyond this answer.

Related

How do we compile and run a program on the CS50 ide?

So basically I am a starter in programming. I do not understand how do I compile and run the program below on Harvard's CS50 IDE.
#include<iostream>
using namespace std;
int main()
{
cout<<"HelloCS50";
}
enter image description here
Start typing in the terminal. follow each command you type with the enter key.
Use the command ls to list all the files in your directory. One of those files should be the code you just wrote and saved.
It's not a requirement, but will make it easier to have the filename end in '.cpp'. If your file does not have that, you can save the file again and add '.cpp' to the filename.
Assuming that your filename is "hello.cpp", use the command g++ hello.cpp to compile your code. This will create another file called a.out.
You can now run your code with the command ./a.out. After doing this you should see that "HelloCS50" has been printed onto the screen.
1: save your file name with .cpp extension. If your file does not have that, you can save the file again and add '.cpp' to the filename.
2: Consider that your filename is "hello.cpp", use the command make hello to compile your code. This will create another file called hello.
3: Now you can write your code with the commond ./hello. After doing this you should see the Output.

how do I load a file for c++ on mac

I am trying to load my file with C++ using ifstream, however it just wouldn't work. I use Atom with Xcode as compiler on my Mac.
This pops up:
dyn3180-214:~ joshua$ /var/folders/y6/jrfdjlsx0nqcxyfvsrfw6bnw0000gn/T/excersice ; exit;
file was not opened correctly
logout
#include <iostream>
#include <fstream>
#include <cstdlib>
int main(){
std::ifstream infile;
infile.open("numbers.txt");
if(!infile.is_open()){
std::cout<<"file was not opened correctly"<<std::endl;
exit(EXIT_FAILURE);
}
int n;
while(infile>>n){
std::cout<<n<<std::endl;
}
return 0;
}
Read how to debug small programs and also the documentation of GDB (or of whatever debugger you have on your machine).
Compile your program (that is the C++ file, let's name it josh.cc, shown in your question) with all warnings and debug info. I recommend to compile it on the command line with g++ -Wall -Wextra -g josh.cc -o joshprog (read how to invoke GCC for details) then to debug it with gdb ./joshprog and to run it in a terminal as ./joshprog.
The point is that your IDE (Atom + XCode) is not helping you. It hides you important details (see this answer, it also works for MacOSX or other Unix systems). That is why I strongly recommend compiling (and running, and debugging) your code with explicit commands that you are typing in a terminal emulator for your shell and understanding (so read the documentation of every command that you are using). Once you are fluent with compilation on Unix systems, you might eventually switch to an IDE (but you need to understand what your IDE is doing on your behalf, and what commands it is running).
You could add into your code something displaying the current working directory by using getcwd (which requires #include <unistd.h> on POSIX system), maybe something like
char mycwdbuf[80];
memset (mycwdbuf, 0, sizeof(mycwdbuf));
if (getcwd(mycwdbuf, sizeof(mycwdbuf)-1) != NULL)
std::cout << "current directory is " << mycwdbuf << std::endl;
By doing that, you'll probably understand how is your program started and in which working directory. I guess that it was not started in the working directory that you wanted it to.
In Xcode, select the project navigator, then click on your project. This will open the project editor. Select the Build Phases tab. Open the dropdown for Copy Files. Set Destination to Products Directory. Add a Subpath if you have to. Drag the necessary files into the project editor or add them via +.
Example: During the build phase, project files associated with the target will be copied to the designated subpath in the directory within the Products directory.
I think, Xcode generating the .o (object file ) file in different directory, and your .txt is present in different directory. I do code in Xcode, it always generate the .o file in different directory.

How do I run a command line tool from a different directory in C++

I am trying to build a C++ application that makes a bunch of command line calls on the Windows command prompt using the system() function. The C++ runs in directory BSP below. BSP contains a sub-folder BSP/XST/Files. One of the commands the application makes, needs to call a command line tool (Xilinx Synthesis tools) that needs to run in the Files directory.
BSP
|---XST
|---|---Files
Doing it manually on the command prompt I would do something similar to:
>>cd XST
>>cd Files
>>xst -h
Is there a way to call a tool in the sub-directory from the BSP directory?
I looked at this question here, but it does not work. I'm guessing because they are talking about an executable that is stored within the sub-directory whereas I am calling a command line tool (i.e. uses environment variables).
To simplify: Is there a command/option to run a command line tool in a sub-folder on the Windows command prompt? I can just emulate the statement via my C++.
As suggested by #CodyGray in the comments, my idea was to use SetCurrentDirectory. If your program is located in the BST directory and you want to run xst in the sub-folder XST\Files relative to it, then it makes sense to also use GetModuleFileName. Use this function to retrieve the path to your program and then replace the file name by your sub-folder. Finally change directory to the modified path:
#include <string>
using namespace std;
int main()
{
// Get the path to your program.
char moduleFilePath[MAX_PATH];
GetModuleFileName(NULL, moduleFilePath, MAX_PATH);
// Find the backslash in front of the name of your program.
string::size_type pos = string(moduleFilePath).rfind("\\");
// Replace the program name by your sub-folder.
string subFolderPath = string(moduleFilePath).substr(0, pos) + "\\XST\\Files";
// Change into the sub-folder relative to your program.
SetCurrentDirectory(subFolderPath.c_str());
// Execute some program in your sub-folder.
system("type test.txt");
return 0;
}
As I don't have xst, I put a text file test.txt into the sub-folder for testing purposes. The file just contains Test test test, so the program above prints out the following:
Test test test
But as suggested by #MikeVine, CreateProcess might be a smarter solution.

How do I create a make file in windows operating system and run it using cmd

I am new to makefile concept
so to try out if I am able to run and compile c files using word "make"in command prompt I made main.c (which contains main function) ,ttt.c (which contain a function void ttt(int)) , mandar.h (headerfile to include void ttt(int) function in main.c)
when I run this program in cmd using "gcc main.c ttt.c -o main && main",program gets compiled and run properly(so there shouldn't be any error in code)
Now in the same directory I made a file Makefile.txt as follow
image of makefile
Now when I type "make "in cmd following message is shown
image of cmd message
I typed everything exactly the same way as in "head first c " book
did I miss something
this is my first time to ask a question so suggestion regarding improvement of questions are also welcomed
Its not Makefile.txt, you have to name it without any extension just Makefile.
Then run the command.
FIY make by default searches for Makefile in the current working directory. You can change this default behavior by typing make -f filename into the command prompt.
You create your Makefile with some editor (emacs, vim, perhaps notepad). Beware that tab characters are significant in that Makefile and most "action" lines in it should start with a tab, not several spaces.
You then type make in some terminal or command window.

How can I compile and run C/C++ code in a Unix console or Mac terminal?

How can I compile/run C or C++ code in a Unix console or a Mac terminal?
If it is a simple single-source program,
make foo
where the source file is foo.c, foo.cpp, etc., you don’t even need a makefile. Make has enough built-in rules to build your source file into an executable of the same name, minus the extension.
Running the executable just built is the same as running any program - but you will most often need to specify the path to the executable as the shell will only search what is in $PATH to find executables, and most often that does not include the current directory (.).
So to run the built executable foo:
./foo
gcc main.cpp -o main.out
./main.out
This is the command that works on all Unix machines... I use it on Linux/Ubuntu, but it works in OS X as well. Type the following command in Terminal.app.
g++ -o lab21 iterative.cpp
-o is the letter O, not zero
lab21 will be your executable file
iterative.cpp is your C++ file
After you run that command, type the following in the terminal to run your program:
./lab21
Two steps for me:
First:
make foo
Then:
./foo
All application execution in a Unix (Linux, Mac OS X, AIX, etc.) environment depends on the executable search path.
You can display this path in the terminal with this command:
echo $PATH
On Mac OS X (by default) this will display the following colon separated search path:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
So any executable in the listed directories can by run just by typing in their name. For example:
cat mytextfile.txt
This runs /bin/cat and displays mytextfile.txt to the terminal.
To run any other command that is not in the executable search path requires that you qualify the path to the executable. So say I had an executable called MyProgram in my home directory on Mac OS X I can fully qualify it like so:
/Users/oliver/MyProgram
If you are in a location that is near the program you wished to execute you can qualify the name with a partial path. For example, if MyProgram was in the directory /Users/oliver/MyProject I and I was in my home directory I can qualify the executable name like this, and have it execute:
MyProject/MyProgram
Or say I was in the directory /Users/oliver/MyProject2 and I wanted to execute /Users/oliver/MyProject/MyProgram I can use a relative path like this, to execute it:
../MyProject/MyProgram
Similarly if I am in the same directory as MyProgram I need to use a "current directory" relative path. The current directory you are in is the period character followed by a slash. For example:
./MyProgram
To determine which directory you are currently in use the pwd command.
If you are commonly putting programs in a place on your hard disk that you wish to run without having to qualify their names. For example, if you have a "bin" directory in your home directory for regularly used shell scripts of other programs it may be wise to alter your executable search path.
This can be does easily by either creating or editing the existing .bash_profile file in your home directory and adding the lines:
#!/bin/sh
export PATH=$PATH:~/bin
Here the tilde (~) character is being used as a shortcut for /Users/oliver. Also note that the hash bang (#!) line needs to be the first line of the file (if it doesn't already exist). Note also that this technique requires that your login shell be bash (the default on Mac OS X and most Linux distributions). Also note that if you want your programs installed in ~/bin to be used in preference to system executables your should reorder the export statement as follows:
export PATH=~/bin:$PATH
Do all of this in "Terminal".
To use the G++ compiler, you need to do this:
Navigate to the directory in which you stored the *.cpp file.
cd ~/programs/myprograms/
(the ~ is a shortcut for your home, i.e. /Users/Ryan/programs/myprograms/, replace with the location you actually used.)
Compile it
g++ input.cpp -o output.bin (output.bin can be anything with any extension, really. Extension .bin is just common on Unix.)
There should be nothing returned if it was successful, and that is okay. Generally you get returns on failures.
However, if you type ls, you will see the list of files in the same directory. For example, you would see the other folders, input.cpp and output.bin
From inside the directory, now execute it with ./outbut.bin
A compact way to go about doing that could be:
make foo && ./$_
It is nice to have a one-liner so you can just rerun your executable again easily.
Assuming the current directory is not in the path, the syntax is ./[name of the program].
For example ./a.out
To compile C or C++ programs, there is a common command:
make filename
./filename
make will build your source file into an executable file with the same name. But if you want to use the standard way, You could use the gcc compiler to build C programs and g++ for C++.
For C:
gcc filename.c
./a.out
For C++:
g++ filename.cpp
./a.out
Add the following to get the best warnings, and you will not regret it. If you can, compile using WISE (warning is error).
- Wall -pedantic -Weffc++ -Werror
Step 1 - create a cpp file using the command
touch test.cpp
Step 2 - Run this command
g++ test.cpp
Step 3 - Run your cpp file
./a.out
I am on a new MacBook Pro with the Apple M1 Pro chip. I have my Xcode installed - both IDE and command line tools. This is how it worked for me:
g++ one.cpp -o one
./one
Use a makefile. Even for very small (= one-file) projects, the effort is probably worth it because you can have several sets of compiler settings to test things. Debugging and deployment works much easier this way.
Read the make manual. It seems quite long at first glance, but most sections you can just skim over. All in all, it took me a few hours and made me much more productive.
I found this link with directions:
http://www.wesg.ca/2007/11/how-to-write-and-compile-c-programs-on-mac-os-x/
Basically you do:
gcc hello.c
./a.out (or with the output file of the first command)
In order to compile and run C++ source code from a Mac terminal, one needs to do the following:
If the path of .cpp file is somePath/fileName.cpp, first go the directory with path somePath
To compile fileName.cpp, type c++ fileName.cpp -o fileName
To run the program, type ./fileName
Just enter in the directory in which your .c/.cpp file is.
For compiling and running C code.
gcc filename.c
./a.out filename.c
For compiling and running C++ code.
g++ filename.cpp
./a.out filename.cpp
You need to go into the folder where you have saved your file.
To compile the code: gcc fileName
You can also use the g++ fileName
This will compile your code and create a binary.
Now look for the binary in the same folder and run it.
For running C++ files, run the below command, assuming the file name is "main.cpp".
Compile to make an object file from C++ file.
g++ -c main.cpp -o main.o
Since #include <conio.h> is not supported on macOS, we should use its alternative which is supported on Mac. That is #include <curses.h>. Now the object file needs to be converted to an executable file. To use file curses.h, we have to use library -lcurses.
g++ -o main main.o -lcurses
Now run the executable.
./main
Running a .C file using the terminal is a two-step process.
The first step is to type gcc in the terminal and drop the .C file to the terminal, and then press Enter:
gcc /Desktop/test.c
In the second step, run the following command:
~/a.out