As I am starting to be tired of reverse-searching in history for the C++ compile command, which I'm using - details on my flags are written here, I defined the following .bash_aliases
function:
function compile-cpp {
if [ -z "1ドル" ]
then
{
echo "Need a file to compile as argument."
}
else
{
# extract file name from path
filename=$(basename "1ドル")
# cut the extension
filename="${filename%.*}"
# compile
g++ 1ドル -std=c++14 -Wall -Wextra -Werror -Wpedantic -pedantic-errors -o "$filename"
}
fi
}
The goal was to take one cpp
file as argument and compile it under the same name as the source's.
So, e.g. when I call:
compile-cpp delete.cpp
I expect it to output a file named as:
delete
In the same directory.
No problems, so far, detected by me, but as I am a C++ beginner, I can't know for sure, if this command will more or less always work.
Note: I don't wish to use a Makefile
yet. The projects and various examples I work with are so little and there's so many of them, I believe it would be counterproductive.
I found the following question, probably trying to achieve somewhat similar thing:
But since I have different demands, looking at his code, I believe it is not its duplicate, in spite of having close to the same titles.
1 Answer 1
You could just go:
export CXXFLAGS=-std=c++14 -Wall -Wextra -Werror -Wpedantic -pedantic-errors
Then at any point you want to compile:
make plop.cpp
This will build the executable plop
. Use the CXXFLAGS
and does NOT need a makefile.
If you want to keep your function, I would allow people to override the defaults using the environment:
function compile-cpp {
if [ -z "1ドル" ]
then
{
echo "Need a file to compile as argument."
}
else
{
# extract file name from path
filename=$(basename "1ドル")
# cut the extension
filename="${filename%.*}"
# compile
if [ -z "${VERBOSE}" ]
then
{
# Normally just want to see the file that is being compiled.
echo ${CXX:-g++} 1ドル -o ${filename}
}
else
{
# But if things are going wrong then you want to see the full command LINE.
echo ${CXX:-g++} 1ドル ${CXXFLAGS:-'-std=c++14 -Wall -Wextra -Werror -Wpedantic -pedantic-errors'} -o "$filename"
}
fi
${CXX:-g++} 1ドル ${CXXFLAGS:-'-std=c++14 -Wall -Wextra -Werror -Wpedantic -pedantic-errors'} -o "$filename"
}
fi
}
Here:
${CXX:-g++} means if the environment variable is empty or null use `g++`
otherwise use the value of `${CXX}`.
Same for the `${CXXFLAGS}`
I would prefer using the make
technique, as this provides you all the facilities of Make in addition to the compiler (so it checks file date stamps) and other stuff.
## Use the fortran compiler for shits and giggles
CXX=fortran compile-cpp plop.cpp
VERBOSE=1 compile-cpp plop.cpp
-
\$\begingroup\$ A very complete answer! One minor improvement: I suggest redirecting the error message to stderr (
>&2
). I'm not sure about the verbose logging - stdout or stderr? Perhaps worth seeing whatset -x
does (and perhaps simply usingset -x
as theelse
branch - but it would need to be restored, so perhaps not worth it). \$\endgroup\$Toby Speight– Toby Speight2017年11月07日 08:32:46 +00:00Commented Nov 7, 2017 at 8:32