[CMake] Correct settings to add docopt.cpp to target list

Adam Getchell adam.getchell at gmail.com
Fri Dec 5 00:30:39 EST 2014


Hello all,

I’m trying to use the docopt.cpp parser for my project[1]:

https://github.com/docopt/docopt.cpp <https://github.com/docopt/docopt.cpp>

The usual invocation to build works:

┌─[adam][Hapkido][±][docopt ✗][~/CDT-plusplus/src/docopt]
└─▪ clang++ --std=c++11 --stdlib=libc++ -I . docopt.cpp examples/naval_fate.cpp -o naval_fate

So, I want to add docopt.cpp and have the compiler look for header files in the same directory, and add that to my executable.

So far, what I’ve attempted is to add the lines:

include_directories (BEFORE "src/docopt")
add_library(docopt.cpp "src/docopt/docopt.cpp”)

My program uses CGAL[2], and all of those library headers are incorporated using the create_single_source_cgal_program function in the CGAL_CreateSingleSourceCGALProgram.cmake module.

The error messages I’m getting correspond to the ones I get when docopt.cpp is not included:

┌─[adam][Hapkido][±][docopt ✗][~/CDT-plusplus/src/docopt]
└─▪ clang++ --std=c++11 --stdlib=libc++ -I . examples/naval_fate.cpp -o naval_fate
Undefined symbols for architecture x86_64:
  "docopt::docopt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool)", referenced from:
      _main in naval_fate-780283.o
  "docopt::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, docopt::value const&)", referenced from:
      _main in naval_fate-780283.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Compare to:

┌─[adam][Hapkido][±][docopt ✗][~/CDT-plusplus]
└─▪ ./build.sh 
-- The C compiler identification is AppleClang 6.0.0.6000054
-- The CXX compiler identification is AppleClang 6.0.0.6000054
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: Ninja -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Ninja
-- Check for working CXX compiler using: Ninja -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Build type: Release
-- USING CXXFLAGS = ' -O3 -DNDEBUG'
-- USING EXEFLAGS = '  -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib '
-- Targetting Ninja
-- Using /usr/bin/c++ compiler.
-- DARWIN_VERSION=14
-- Mac Leopard detected
-- Requested component: Core
-- Requested component: MPFR
-- Requested component: GMP
-- Found Eigen3: /usr/local/include/eigen3 (found suitable version "3.2.2", minimum required is "3.1.0") 
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/adam/CDT-plusplus/build
[10/13] Linking CXX executable cdt-docopt
FAILED: : && /usr/bin/c++   -O3 -DNDEBUG -Wl,-search_paths_first -Wl,-headerpad_max_install_names -Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib CMakeFiles/cdt-docopt.dir/src/cdt-docopt.cpp.o  -o cdt-docopt -L/Users/adam/gmock-1.7.0/lib/.libs  -L/Users/adam/gmock-1.7.0/gtest/lib/.libs /usr/local/lib/libmpfr.dylib /usr/local/lib/libgmp.dylib /usr/local/lib/libCGAL_Core.dylib /usr/local/lib/libCGAL.dylib /usr/local/lib/libboost_thread-mt.dylib /usr/local/lib/libboost_system-mt.dylib /usr/local/lib/libCGAL_Core.dylib /usr/local/lib/libCGAL.dylib /usr/local/lib/libboost_thread-mt.dylib /usr/local/lib/libboost_system-mt.dylib -Wl,-rpath,/Users/adam/gmock-1.7.0/lib/.libs -Wl,-rpath,/Users/adam/gmock-1.7.0/gtest/lib/.libs && :
Undefined symbols for architecture x86_64:
  "docopt::docopt(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool)", referenced from:
      _main in cdt-docopt.cpp.o
  "docopt::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, docopt::value const&)", referenced from:
      _main in cdt-docopt.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[10/13] Building CXX object CMakeFiles/unittests.dir/unittests/Triangulated2SphereTest.cpp.o
ninja: build stopped: subcommand failed.

Any suggestions?

[1] https://github.com/acgetchell/CDT-plusplus/tree/docopt <https://github.com/acgetchell/CDT-plusplus/tree/docopt>
[2] https://www.cgal.org <https://www.cgal.org/>

Adam Getchell
about.me/adamgetchell

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20141204/bfacd845/attachment-0001.html>


More information about the CMake mailing list