Makefile and main header file for a shell
What is the header file's name?  The point being that the name of the header file, like xopen.h should have some connection to the items inside.  Further, the objects declares and macros defines are all over the name space.  Consider some convention. Put do_...() in do.h, CommandEntry in CommandEntry.h.  
Strange #define.  Did you mean #define VERSION "v0.1a"?

#ifndef VERSION
//#define VERSION2 "v0.1a"
#define VERSION "v0.1a"
#endif

static struct option options[] will create a options[] with each *.c this include file is used.  Certainly not a good idea because it is static.  `static objects are best for the *.c file and not *.h header files.
Odd to have #define _XOPEN_SOURCE 500 and #define VERSION "v0.160429-21-g54bb-dirty" outside the include guard #ifndef OPENSHELL_OPENSHELL_H.  Suggest putting them inside unless you are attempting something novel.
Line spacing is odd.  Why no line space after a struct definition, yet spaces between similar function declarations.

struct command {
    char *const *argv;
};
extern void freeChunks(void);

extern char **str_split(char *a[], char *a_str, const char a_delim);

extern int do_checkenv(int argc, const char **argv);

The horizontal space is odd here - perhaps an effect of using tabs?

#define    CMD_LEN        1024
#define    EXPAND_ALLOC    1024
#define    PATH_LEN    1024
#define    isBlank(ch)    (((ch) == ' ') || ((ch) == '\t'))
#define    isDecimal(ch)    (((ch) &gt;= '0') &amp;&amp; ((ch) &lt;= '9'))
#define    MAX_SOURCE    10

All UPPERCASE identifiers are often considered macros.  Code with CHUNK may confuse viewers of your code.  Re:typedef struct chunk CHUNK;
Not using all UPPERCASE for defines like with #define isBlank(ch) is a problem as a user of that macro does not benefit from the all uppercase hint that it is a macro.  That macro uses ch twice (((ch) == ' ') || ((ch) == '\t')).  Consider the effect of this usage

int ch;
while (isBlank(ch = getchar())) { ... }

Standard suggestion.  Add name and date (year) to your code.

// 2016 Programmer 400

C has a boolean _Bool.  By using &lt;stdbool.h&gt; , code has access to bool, true, false.  Suggest true rather than TRUE in #define    DEBUG TRUE.
Order:  In general, it is cleaner to do the define first, struct, union, typedef, then global variables and lastly function declaration.  This is highly a style issue though.
Unclear why some function have a preceding extern and others do not.  With function declarations, extern is not necessary.  To use or not is a style issue, but it should certainly be consistent within a *.h file.

// to extern or not to extern, that is the question.  
extern int do_kill(int argc, const char **argv);
int spawn_proc(int in, int out, struct command *cmd);