[CMake] Makefile to CMakeLists.txt (GTEST)

Kevyn-Alexandre Paré kapare at rogue-research.com
Tue Dec 7 12:10:00 EST 2010


Yes it's true I didn't think of this one. It work nicely, here what I
have done:

wget http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2
tar xjvf gtest-1.5.0.tar.bz2
cd gtest-1.5.0
mkdir my-test
vim CMakeLists.txt # Add ADD_SUBDIRECTORY(my-test)
cd my-test

# SIMPLE HEADER FILE
vim source.h
void function ();

# SIMPLE SOURCE
vim source.c
#include <stdio.h>
void function ()
{
    printf("my function to test\n");
}

# SIMPLE TEST
vim ut_source.cc
#include <limits.h>
#include <unistd.h>
#include <gtest/gtest.h>
#include "source.h"
static int something()
{
    function();
    return 0;
}
TEST(RRThread, CreateThread)
{
    EXPECT_EQ(0, something());
}

vim CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(UnitTests)
INCLUDE_DIRECTORIES(~/gtest-1.5.0/my-test)
ADD_EXECUTABLE(UT ut_source.cc source.c)
TARGET_LINK_LIBRARIES(UT pthread ~/gtest-1.5.0/my-build/libgtest.a
~/gtest-1.5.0/my-build/libgtest_main.a)

cd ..
mkdir my-build
cd my-build
ccmake ..

make

Best Regards,

Kevyn-Alexandre Paré


On Wed, 2010-12-01 at 10:43 -0800, Ben Medina wrote:
> Note that recent versions of gtest come with a CMakeLists.txt, so you
> can just use add_subdirectory on the gtest source tree.
> 
> - Ben
> 
> On Wed, Dec 1, 2010 at 7:59 AM, Kevyn-Alexandre Paré
> <kapare at rogue-research.com> wrote:
> > Philip,
> >
> > Thx for the reply. Neither of these solutions change a thing.
> >
> > I try to play with ADD_CUSTOM_TARGET but same error...
> >
> > ADD_CUSTOM_TARGET(RRThread.o ALL COMMAND ${CMAKE_C_COMPILER} -I
> > ${MICRONTRACKER_COMMON_PATH} -I${GTEST_HEADER_PATH} -lpthread -c
> > ${MICRONTRACKER_COMMON_PATH}RRThread.c
> > ${UNIT_TEST_PATH}common/UT_RRThread.cc)
> >
> > ADD_CUSTOM_TARGET(UT_RRThread ALL COMMAND ${CMAKE_CXX_COMPILER} -I
> > ${MICRONTRACKER_COMMON_PATH} -I${GTEST_HEADER_PATH} -lpthread RRThread.o
> > UT_RRThread.o ${GTEST_LIB_PATH}gtest.a ${GTEST_LIB_PATH}gtest_main.a -o
> > UT_RRThread)
> >
> > Result:
> > UT_RRThread.o: In function `thread_proc(void*)':
> > UT_RRThread.cc:(.text+0x28): undefined reference to `exitThread()'
> > ...
> >
> > I pretty sure that I'm missing little detail. How can I implicitly add
> > dependency to the object during the linking?
> >
> > Regards
> >
> > --
> > Kevyn-Alexandre Paré
> >
> >
> > On Mon, 2010-11-29 at 18:17 -0500, Philip Lowman wrote:
> >> Try adding the "gtest.a" library as well.  Also, order does matter
> >> when you are linking static libraries so you might need to play with
> >> the ordering.
> >>
> >>
> >> Also, when you get some time, have a look at FindGTest.cmake.  It may
> >> help you simplify adding your tests.
> >>
> >> On Mon, Nov 29, 2010 at 5:55 PM, Kevyn-Alexandre Paré
> >> <kapare at rogue-research.com> wrote:
> >>         Hi,
> >>
> >>         /// -> What I trying to do is to compile my unit test with
> >>         google test
> >>         with cmake from a working Makefile.
> >>
> >>         /// -> Here the Makefile::::
> >>
> >>         RRThread.o : $(USER_DIR)/RRThread.c $(USER_DIR)/RRThread.h
> >>         $(GTEST_HEADERS)
> >>            $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/RRThread.c
> >>
> >>         UT_RRThread.o : $(UNITTEST_DIR)/UT_RRThread.cc \
> >>                             $(USER_DIR)/RRThread.h $(GTEST_HEADERS)#
> >>            $(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c
> >>         $(UNITTEST_DIR)/UT_RRThread.cc
> >>
> >>         UT_RRThread : RRThread.o UT_RRThread.o gtest_main.a
> >>            $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
> >>
> >>
> >>         /// -> Here how I thought of doing it with CMakeLists.txt:::
> >>
> >>         INCLUDE_DIRECTORIES(${GTEST_HEADER} ${USER_DIR})
> >>
> >>         ADD_EXECUTABLE(UT ${USER_DIR}RRThread.c
> >>         ${UNIT_TEST_PATH}UT_RRThread.cc)
> >>
> >>         TARGET_LINK_LIBRARIES(UT pthread
> >>         ${GTEST_LIB_PATH}gtest_main.a)
> >>
> >>         /// -> My result:
> >>
> >>         Linking CXX executable UT
> >>         /usr/bin/cmake -E cmake_link_script CMakeFiles/UT.dir/link.txt
> >>         --verbose=1
> >>         /usr/bin/c++      CMakeFiles/UT.dir/common/RRThread.c.o
> >>         CMakeFiles/UT.dir/UnitTests/common/UT_RRThread.cc.o  -o UT
> >>         -rdynamic
> >>         -lpthread /home/andromeda/rogue-research/3rdParty/gtest/trunk/Release/lib/gtest_main.a
> >>         CMakeFiles/UT.dir/UnitTests/common/UT_RRThread.cc.o: In
> >>         function
> >>         `thread_proc(void*)':
> >>         UT_RRThread.cc:(.text+0x28): undefined reference to
> >>         `exitThread()'
> >>
> >>
> >>         /// -> My question and my problem is:
> >>         Since I'm including the USER_DIR with INCLUDE_DIRECTORIES why
> >>         is it
> >>         complaining about not finding reference that is in that header
> >>         file?
> >>
> >>
> >>         Best Regards,
> >>
> >>         --
> >>         Kevyn-Alexandre Paré
> >>
> >>         _______________________________________________
> >>         Powered by www.kitware.com
> >>
> >>         Visit other Kitware open-source projects at
> >>         http://www.kitware.com/opensource/opensource.html
> >>
> >>         Please keep messages on-topic and check the CMake FAQ at:
> >>         http://www.cmake.org/Wiki/CMake_FAQ
> >>
> >>         Follow this link to subscribe/unsubscribe:
> >>         http://www.cmake.org/mailman/listinfo/cmake
> >>
> >>
> >>
> >> --
> >> Philip Lowman
> >>
> >
> >
> > _______________________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
> >
> > Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.cmake.org/mailman/listinfo/cmake




More information about the CMake mailing list