[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