Re: [CMake] Correct settings to add docopt.cpp to target list
It turns out that CGAL's CGAL_CreateSingleSourceCGALProgram.cmake module handles this nicely: create_single_source_cgal_program( "src/cdt-docopt.cpp" "src/docopt/docopt.cpp") does the trick. Thanks for your consideration! On Thu, Dec 4, 2014 at 10:54 PM, Adam Getchell wrote: > I should note that I'm doing an out of source build, and that for my > project the following line works: > > ┌─[*adam*][Hapkido][*±*][docopt *✓*][~/CDT-plusplus/build] > > └─▪ clang++ --std=c++11 --stdlib=libc++ -I ../src/docopt > ../src/docopt/docopt.cpp ../src/cdt-docopt.cpp -o cdt_docopt > > On Thu, Dec 4, 2014 at 9:30 PM, Adam Getchell > wrote: > >> Hello all, >> >> I’m trying to use the docopt.cpp parser for my project[1]: >> >> 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> std::__1::char_traits, std::__1::allocator > const&, >> std::__1::vector, >> std::__1::allocator >, >> std::__1::allocator> std::__1::char_traits, std::__1::allocator > > > const&, bool, >> std::__1::basic_string, >> std::__1::allocator > const&, bool)", referenced from: >> _main in naval_fate-780283.o >> "docopt::operator<<(std::__1::basic_ostream> std::__1::char_traits >&, 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.654 >> -- The CXX compiler identification is AppleClang 6.0.0.654 >> -- 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> std::__1::char_traits, std::__1::allocator > const&, >> std::__1::vector, >> std::__1::allocator >, >> std::__1::allocator> std::__1::char_traits, std::__1::allocator > > > const&, bool, >> std::__1::basic_string, >> std::__1::allocator > const&, bool)", refe
Re: [CMake] Correct settings to add docopt.cpp to target list
I should note that I'm doing an out of source build, and that for my project the following line works: ┌─[*adam*][Hapkido][*±*][docopt *✓*][~/CDT-plusplus/build] └─▪ clang++ --std=c++11 --stdlib=libc++ -I ../src/docopt ../src/docopt/docopt.cpp ../src/cdt-docopt.cpp -o cdt_docopt On Thu, Dec 4, 2014 at 9:30 PM, Adam Getchell wrote: > Hello all, > > I’m trying to use the docopt.cpp parser for my project[1]: > > 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 std::__1::char_traits, std::__1::allocator > const&, > std::__1::vector, > std::__1::allocator >, > std::__1::allocator std::__1::char_traits, std::__1::allocator > > > const&, bool, > std::__1::basic_string, > std::__1::allocator > const&, bool)", referenced from: > _main in naval_fate-780283.o > "docopt::operator<<(std::__1::basic_ostream std::__1::char_traits >&, 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.654 > -- The CXX compiler identification is AppleClang 6.0.0.654 > -- 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 std::__1::char_traits, std::__1::allocator > const&, > std::__1::vector, > std::__1::allocator >, > std::__1::allocator std::__1::char_traits, std::__1::allocator > > > const&, bool, > std::__1::basic_string, > std::__1::allocator > const&, bool)", referenced from: > _main in cdt-docopt.cpp.o > "docopt::operator<<(std::__1::basic_ostream std::__1::char_traits >&, 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/Tria