[CMake] Makefile to CMakeLists.txt (GTEST)

Kevyn-Alexandre Paré kapare at rogue-research.com
Tue Dec 7 15:21:16 EST 2010


Just want to say that since I want to test C code i need this in my
header file (for more details see
http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%
2B#Linking_C_and_C.2B.2B_code):

#ifdef __cplusplus /* If this is a C++ compiler, use C linkage */
extern "C" {
#endif

void function ();

#ifdef __cplusplus /* If this is a C++ compiler, end C linkage */
}
#endif


On Tue, 2010-12-07 at 12:10 -0500, Kevyn-Alexandre Paré wrote:
> 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