I'm trying to convert my Makefile to a CMakeLists.txt so that I can compile on Windows and Mac computers too.
I haven't found answers to all of my questions, so I hope somebody can help me.
Here's my Makefile:
Code:
#
# Copyright (C) 2011, 2012 Roel Janssen <roel@moefel.org>
# ... GPLv3 or later copyright notice ...
#
## The compiler command used to compile the stuff.
CC = g++
## Required Boost libraries to build this application.
BOOST_STUFF = -lboost_filesystem -lboost_system -lssl -lcrypto -pthread
## The Botan library is needed for the SHA-256 algorithm.
BOTAN_STUFF = -lbotan
## Choose your prefered database back-end.
## Please note that you need to compile cppdb with support for this driver.
## Add either -lcppdb_postgresql, -lcppdb_sqlite3 or -lcppdb_mysql to DB_BACKENDS
DB_BACKENDS = -lcppdb_sqlite3
DATABASE_STUFF = -lcppdb $(DB_BACKENDS) -ldl
BUILD_TARGET = build/Distributor
OPTIMIZATION = -Wall -Wextra -Os
## A list of all objects.
# Left out: pop3.o
OBJECTS = node.o http.o https.o \
sha256.o base64.o \
db_documents.o db_publishers.o db_crawler.o db_domainindexer.o \
xml_identifier.o xml_documents.o xml_configuration.o xml_publishers.o xml_authentication.o \
main.o
first: all
node.o: source/data/node.cpp source/data/node.h
$(CC) $(OPTIMIZATION) -c source/data/node.cpp
http.o: source/technology/network/http.cpp source/technology/network/network.h
$(CC) $(OPTIMIZATION) $(BOOST_STUFF) -c source/technology/network/http.cpp
https.o: source/technology/network/https.cpp source/technology/network/network.h
$(CC) $(OPTIMIZATION) $(BOOST_STUFF) -c source/technology/network/https.cpp
pop3.o: source/technology/network/pop3.cpp source/technology/network/network.h
$(CC) $(OPTIMIZATION) $(BOOST_STUFF) -c source/technology/network/pop3.cpp
pop3s.o: source/technology/network/pop3s.cpp source/technology/network/network.h
$(CC) $(OPTIMIZATION) $(BOOST_STUFF) -c source/technology/network/pop3s.cpp
sha256.o: source/technology/encryption/sha256.cpp source/technology/encryption/encryption.h
$(CC) $(OPTIMIZATION) $(BOTAN_STUFF) -c source/technology/encryption/sha256.cpp
base64.o: source/technology/encryption/base64.cpp source/technology/encryption/encryption.h
$(CC) $(OPTIMIZATION) $(BOTAN_STUFF) -c source/technology/encryption/base64.cpp
db_publishers.o: source/technology/database/publishers.cpp source/technology/database/publishers.h
$(CC) $(OPTIMIZATION) -c source/technology/database/publishers.cpp -o db_publishers.o
db_documents.o: source/technology/database/documents.cpp source/technology/database/documents.h
$(CC) $(OPTIMIZATION) -c source/technology/database/documents.cpp -o db_documents.o
db_crawler.o: source/technology/database/crawler.cpp source/technology/database/crawler.h
$(CC) $(OPTIMIZATION) -c source/technology/database/crawler.cpp -o db_crawler.o
db_domainindexer.o: source/technology/database/domainindexer.cpp source/technology/database/domainindexer.h
$(CC) $(OPTIMIZATION) -c source/technology/database/domainindexer.cpp -o db_domainindexer.o
xml_documents.o: source/technology/xml/documents.cpp source/technology/xml/parsers.h
$(CC) $(OPTIMIZATION) -c source/technology/xml/documents.cpp -o xml_documents.o
xml_identifier.o: source/technology/xml/identifier.cpp source/technology/xml/parsers.h
$(CC) $(OPTIMIZATION) -c source/technology/xml/identifier.cpp -o xml_identifier.o
xml_configuration.o: source/technology/xml/configuration.cpp source/technology/xml/parsers.h
$(CC) $(OPTIMIZATION) -c source/technology/xml/configuration.cpp -o xml_configuration.o
xml_publishers.o: source/technology/xml/publishers.cpp source/technology/xml/parsers.h
$(CC) $(OPTIMIZATION) -c source/technology/xml/publishers.cpp -o xml_publishers.o
xml_authentication.o: source/technology/xml/authentication.cpp source/technology/xml/parsers.h
$(CC) $(OPTIMIZATION) -c source/technology/xml/authentication.cpp -o xml_authentication.o
main.o: source/main.cpp
$(CC) $(OPTIMIZATION) $(DATABASE_STUFF) $(BOTAN_STUFF) $(BOOST_STUFF) -c source/main.cpp
all: $(OBJECTS)
$(CC) $(OPTIMIZATION) $(DATABASE_STUFF) $(BOOST_STUFF) $(BOTAN_STUFF) $(OBJECTS) -o $(BUILD_TARGET)
clean:
rm -rf $(OBJECTS)
clean-all:
rm -rf $(OBJECTS) $(BUILD_TARGET)
install:
rm -rf /usr/bin/distributor
cp $(BUILD_TARGET) /usr/bin/distributor
Here's what I've got so far in my CMakeLists.txt (it's not much, I know):
Code:
cmake_minimum_required (VERSION 2.6)
# This is the main CMake build file for Distributor
project (Distributor)
# Add the source directory
add_subdirectory (source)
# Generate an executable from called Distributor from main.cpp
add_executable (build/node.o source/node.cpp)
add_executable (build/Distributor source/main.cpp)
I don't even know if I'm on the right way of adding executables..
I also wonder if I can integrate another CMakeLists.txt (from third party source code (cppdb)) into the project's CMakeLists.txt..