All you are missing is the inline
keyword like so:
inline void Log(const char* message)
Without inline
, the functions are created for each source file including your header file.
static
would have a similar outcome, but inlining seems preferred for such a small functions.
Or, if you don't want to make the compiler create the code again and again in all files, you of course need to have the implementation just once in one .cpp file and leave just the declaration in the header.
In order for the DEBUG_MODE to affect it, though, you will need to do it e.g. like this:
#ifndef DEBUG_MODE
// Dummy implementation
inline void Log(...) {}
#else
// Implemented in Log.cpp
void Log(const char* message);
void Log(const char* messageFormat, const char* parameter);
#endif