Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CMakeLists in node.native + seperate project? #33

Open
AlecTaylor opened this issue Jan 14, 2014 · 2 comments
Open

CMakeLists in node.native + seperate project? #33

AlecTaylor opened this issue Jan 14, 2014 · 2 comments

Comments

@AlecTaylor
Copy link

How do I setup a separate project that works with node.native (from git, not from install library locations)?

Here is what I have tried:

git clone https://github.com/d5/node.native.git
mkdir routing_tests && cd $_

Then I created main.cpp and CMakeLists.txt:

project(routing_tests)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
include_directories(../node.native/ ../node.native/native)
include_directories(../node.native/libuv ../node.native/libuv/include ../node.native/http-parser)

But unfortunately I get these errors: Qt Creator screenshot

How do I fix this? - Also, are you planning on moving from vanilla Makefiles to CMake?

@sebjameswml
Copy link
Contributor

Hi Alec,

You'll need to link to libuv.so - you'll have to cook that into your CMakeLists.txt file.

You'll also need to link http-parser.o into your executable.

Here's how I do this for a project I've been developing where I've used autotools, so this is a Makefile.am (which gets turned into Makefile.in, then finally into a Makefile).

The program is called "dt":

===================================
AUTOMAKE_OPTIONS = check-news dist-bzip2
SUBDIRS = src
bin_PROGRAMS = dt
dt_SOURCES = dt.cpp
dt_LDADD = src/ipp/libdtipp.la /usr/local/lib/libuv.a /usr/local/lib/http_parser.o
INCLUDES = -I./usr/local/include
CLEANFILES = *~
MAINTAINERCLEANFILES = aclocal.m4 dt-*.tar.gz dt-*.tar.bz2 dt-*.diff
====================================

Note that my includes are in /usr/local/include and my libs (libuv.so and http-parser.o) are in /usr/local/lib/

I added a few lines to the node.native Makefile so that it would install the relevant files into /usr/local/include and /usr/local/lib/ on my Debian development system. This is really just a quick hack:

=========================================================
# Note: Copy in libuv and http-parser, as required with this? Will eventually make myself
# a libnative shared object?
install:
# http-parser (headers and object code)
        cp http-parser/http_parser.h /usr/local/include/
# libuv (headers and static lib)
        cp libuv/libuv.a /usr/local/lib/
        mkdir -p /usr/local/include/uv
        cp libuv/include/uv.h /usr/local/include/
        cp -Ra libuv/include/uv-private /usr/local/include/
# node.native (headers only)
        cp -Ra native /usr/local/include/
================================================

With this, I can do "make install" in node.native then go over to my "dt" directory and compile there.

Hope that helps,

Seb

@AlecTaylor
Copy link
Author

Thanks Seb, will try that tonight.

In the meantime, can you help me understand why people are writing vanilla Makefiles rather than using CMake?

Isn't one of the big advantages of libuv that it abstracts cross-platform differences?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants