• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
Johnell

Building C/C++ project without IDE

11 posts in this topic

If I decide to use a text editor like vim or emacs for coding, what is the best way to compile a C/C++ program with multiple files? Is makefiles the way to go or is there some alternative?

0

Share this post


Link to post
Share on other sites

How is it done if I want to link my project to some 3rd party library/framework? If I'm using SDL for instance.

0

Share this post


Link to post
Share on other sites

Specify them in your linker flags. Add them to your header includes paths as well. In the makefile.

0

Share this post


Link to post
Share on other sites

How is it done if I want to link my project to some 3rd party library/framework? If I'm using SDL for instance.

In my Makefile, I wrote LDFLAGS += -lz -lm which says I'm linking to zlib (-lz) and the standard math library (-lm). If I needed to specify a path to the zlib library, I would have added -L/path/to/zlib/library before -lz. As Washu says, you'll need to include the header search path as well (which I typically do by adding -I/path/to/some/headers to CFLAGS).

 

If you're not very familiar with compiling from the command line, I would suggest starting out by manually typing in the compilation commands so that you start to learn them. Once you understand how to compile things from the command line (and specify all your dependencies and desired compiler flags), Makefiles are much easier to understand and use.

2

Share this post


Link to post
Share on other sites

 

How is it done if I want to link my project to some 3rd party library/framework? If I'm using SDL for instance.

In my Makefile, I wrote LDFLAGS += -lz -lm which says I'm linking to zlib (-lz) and the standard math library (-lm). If I needed to specify a path to the zlib library, I would have added -L/path/to/zlib/library before -lz. As Washu says, you'll need to include the header search path as well (which I typically do by adding -I/path/to/some/headers to CFLAGS).

 

If you're not very familiar with compiling from the command line, I would suggest starting out by manually typing in the compilation commands so that you start to learn them. Once you understand how to compile things from the command line (and specify all your dependencies and desired compiler flags), Makefiles are much easier to understand and use.

 

 

Also, if you are using linux you can set the environment variable LD_LIBRARY_PATH instead of using -L/path/to/zlib/library and CPATH instead of using -I/path/to/some/headers. You may specify multiple paths by separating them with ":", for instance:

export LD_LIBRARY_PATH=/path/to/zlib/library:/path/to/another/library

1

Share this post


Link to post
Share on other sites

Makefiles, for sure.
 
For large projects, GNU Autoconf is typically used to generate the configuration files and makefiles. But don't worry so much about autoconf tools. Simply using Makefiles is simple enough. There are also some hacks you can do to simplify things. For example, here's part of a Makefile I use at work:
 

# C++ compiler
CXX     = g++
 
# C compiler
CC      = gcc
 
# C compilation flags
CFLAGS  = -std=c99 -Wall -pthread -DNDEBUG -O3
 
# Preprocessor definitions
C_DEFS  = -D_POSIX_C_SOURCE=199309
 
# Linker flags
LDFLAGS += -lz -lm
 
# Build targets
all: program
 
# Rules for converting .c files into .o files
.SUFFIXES: .c
 
%.o: %.c
        $(CC) $(C_DEFS) $(CFLAGS) -MMD -c $<
 
# List of source files
SRCS  = SourceFile1.c \
        SourceFile2.c \
        SourceFile3.c \
        main.c
OBJS = $(SRCS:.c=.o)
DEPS = $(OBJS:.o=.d)
 
# Include the .d dependency files
-include $(DEPS)
 
# Build the target "program"
program: $(OBJS)
        $(CC) $(C_DEFS) $(CFLAGS) $^ $(LDFLAGS) -o $@

clean:
        rm -f *.o *.d program

Basically, with this Makefile, I can easily change the compiler and compiler (and linker) flags to whatever I need. Adding a new file to the project is as simple as just adding it to SRCS. You could modify it a bit to have a "program-d" target (for example) that makes a debug build if you wanted, too.

A problem with this file though is that make won't detect changes to header files for you. For a more robust system, you'll want to put each source file in your project on a seperate line, and specify the files it depends upon. For example:

 

a_file.o: a_file.c a_file.h other_header.h
        $(CC) $(C_DEFS) $(CFLAGS) -MMD -c a_file.c

Also beware, make requires TAB characters, not spaces for indent.

0

Share this post


Link to post
Share on other sites

A problem with this file though is that make won't detect changes to header files for you. For a more robust system, you'll want to put each source file in your project on a seperate line, and specify the files it depends upon.

Actually, yes it will. The -MMD flag when building the .o files generates .d dependency files, which get included by -include $(DEPS). My makefile automatically detects and generates dependency lists (and updates them when you change files).

0

Share this post


Link to post
Share on other sites

I would go with CMake as Matt-D suggested.

 

Alternatively, SCons is also really simple to use and will output the final executable with just one command.

 

In my opinion you should try to stay away from pure make, it will probably only give you headaches.

0

Share this post


Link to post
Share on other sites

In my opinion you should try to stay away from pure make, it will probably only give you headaches.

I would say knowing how to use Makefiles is a very valuable skill. I don't think you have to have extensive knowledge of Make, but it's certainly something everyone should have at least some experience with and be able to use at least on a basic level. If you develop in C or C++, you will, at some point, have to deal with Make and Makefiles, even if you hate them bitterly. I personally think he should at least use Makefiles for a little bit, maybe for a project or two, and then move onto something else, if he wishes.

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0