I've been working on a project using the v8 C++ library, I used to compile it with a Makefile, but to the extent that I'm using CLion and I wanted to debug, I had to use a CMakeLists.txt
file.
The problem I have is that the Makefile is working, but not the cmake...
Here's the Makefile:
NAME = project
SRC = src/main.cpp
OBJ = $(SRC:.cpp=.o)
CXXFLAGS = -Iv8/include -std=c++11
LIBV8 = -Lv8/out/native/obj.target/third_party/icu/. -Lv8/out/native/obj.target/src/. -Wl,--start-group -lv8_base -lv8_libbase -lv8_external_snapshot -lv8_libplatform -lv8_libsampler -licuuc -licui18n -Wl,--end-group
all: $(NAME)
$(NAME): $(OBJ)
g++ -pthread -lSDL2 $^ -o $@ $(CXXFLAGS) $(LIBV8) -lrt -ldl
And here's the CMake version I made:
cmake_minimum_required(VERSION 2.8.4)
project(Project CXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories(${CMAKE_SOURCE_DIR}/v8/include)
include_directories(/usr/include/SDL2)
set(SDL2_LIBRARY /usr/lib/x86_64-linux-gnu/libSDL2.a)
find_package(Threads)
set(LIBV8
v8_base
v8_libbase
v8_external_snapshot
v8_libplatform
v8_libsampler
icuuc
icui18n
rt
dl
)
link_directories(
${CMAKE_SOURCE_DIR}/v8/out/native/obj.target/src/
${CMAKE_SOURCE_DIR}/v8/out/native/obj.target/third_party/icu/
${CMAKE_SOURCE_DIR}/v8/build/linux/debian_jessie_amd64-sysroot/usr/lib/x86_64-linux-gnu/
)
file(GLOB_RECURSE SOURCES
${CMAKE_SOURCE_DIR}/src/main.cpp
)
add_executable(project ${SOURCES})
target_link_libraries(project ${CMAKE_THREAD_LIBS_INIT} ${SDL2_LIBRARY} ${LIBV8})
I think I have correctly linked all the necessary libraries, but when I compile with the CMake version, I have tons of those errors (they are too many for my terminal, so I'll just put a snippet, "référence indéfinie vers" means "undefined reference to"):
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormatC2EPKdPKaPKNS_13UnicodeStringEi+0x43): référence indéfinie vers « icu_59::MessagePattern::MessagePattern(UErrorCode&) »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::ChoiceFormat(icu_59::ChoiceFormat const&) »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormatC2ERKS0_+0x3f): référence indéfinie vers « icu_59::MessagePattern::MessagePattern(icu_59::MessagePattern const&) »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::ChoiceFormat(icu_59::UnicodeString const&, UParseError&, UErrorCode&) »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormatC2ERKNS_13UnicodeStringER11UParseErrorR10UErrorCode+0x35): référence indéfinie vers « icu_59::MessagePattern::MessagePattern(UErrorCode&) »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::operator==(icu_59::Format const&) const »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZNK6icu_5912ChoiceFormateqERKNS_6FormatE+0x3a): référence indéfinie vers « icu_59::MessagePattern::operator==(icu_59::MessagePattern const&) const »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::operator=(icu_59::ChoiceFormat const&) »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormataSERKS0_+0x39): référence indéfinie vers « icu_59::MessagePattern::operator=(icu_59::MessagePattern const&) »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::~ChoiceFormat() »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormatD2Ev+0x13): référence indéfinie vers « icu_59::MessagePattern::~MessagePattern() »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::~ChoiceFormat() »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormatD0Ev+0x13): référence indéfinie vers « icu_59::MessagePattern::~MessagePattern() »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::applyPattern(icu_59::UnicodeString const&, UErrorCode&) »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormat12applyPatternERKNS_13UnicodeStringER10UErrorCode+0x17): référence indéfinie vers « icu_59::MessagePattern::parseChoiceStyle(icu_59::UnicodeString const&, UParseError*, UErrorCode&) »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::applyPattern(icu_59::UnicodeString const&, UParseError&, UErrorCode&) »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormat12applyPatternERKNS_13UnicodeStringER11UParseErrorR10UErrorCode+0x12): référence indéfinie vers « icu_59::MessagePattern::parseChoiceStyle(icu_59::UnicodeString const&, UParseError*, UErrorCode&) »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::format(double, icu_59::UnicodeString&, icu_59::FieldPosition&) const »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZNK6icu_5912ChoiceFormat6formatEdRNS_13UnicodeStringERNS_13FieldPositionE+0x8e): référence indéfinie vers « icu_59::MessagePattern::getNumericValue(icu_59::MessagePattern::Part const&) const »
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZNK6icu_5912ChoiceFormat6formatEdRNS_13UnicodeStringERNS_13FieldPositionE+0x144): référence indéfinie vers « icu_59::MessageImpl::appendSubMessageWithoutSkipSyntax(icu_59::MessagePattern const&, int, icu_59::UnicodeString&) »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::findSubMessage(icu_59::MessagePattern const&, int, double) »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormat14findSubMessageERKNS_14MessagePatternEid+0x6e): référence indéfinie vers « icu_59::MessagePattern::getNumericValue(icu_59::MessagePattern::Part const&) const »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::parseArgument(icu_59::MessagePattern const&, int, icu_59::UnicodeString const&, icu_59::ParsePosition&) »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZN6icu_5912ChoiceFormat13parseArgumentERKNS_14MessagePatternEiRKNS_13UnicodeStringERNS_13ParsePositionE+0x5d): référence indéfinie vers « icu_59::MessagePattern::getNumericValue(icu_59::MessagePattern::Part const&) const »
/home/xobtah/v8_Build/v8/out/native/obj.target/icui18n/third_party/icu/source/i18n/choicfmt.o: dans la fonction « icu_59::ChoiceFormat::clone() const »:
../third_party/icu/source/i18n/choicfmt.cpp:(.text._ZNK6icu_5912ChoiceFormat5cloneEv+0x4d): référence indéfinie vers « icu_59::MessagePattern::MessagePattern(icu_59::MessagePattern const&) »
collect2: error: ld returned 1 exit status
CMakeFiles/project.dir/build.make:95: recipe for target 'project' failed
make[2]: *** [project] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/project.dir/all' failed
make[1]: *** [CMakeFiles/project.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
Thank you very much for your attention, I appreciate that!
EDIT: make VERBOSE=1
makes that for linking:
[ 50%] Linking CXX executable project
/opt/cmake-3.7.1-Linux-x86_64/bin/cmake -E cmake_link_script CMakeFiles/project.dir/link.txt --verbose=1
/usr/bin/c++ -std=c++11 CMakeFiles/project.dir/src/main.cpp.o -o project -L/home/xobtah/Project/v8/out/native/obj.target/src -L/home/xobtah/Project/v8/out/native/obj.target/third_party/icu -L/home/xobtah/Project/v8/build/linux/debian_jessie_amd64-sysroot/usr/lib/x86_64-linux-gnu -Wl,-rpath,/home/xobtah/Project/v8/out/native/obj.target/src:/home/xobtah/Project/v8/out/native/obj.target/third_party/icu:/home/xobtah/Project/v8/build/linux/debian_jessie_amd64-sysroot/usr/lib/x86_64-linux-gnu -rdynamic -lpthread -Wl,-Bstatic -lSDL2 -Wl,-Bdynamic -lv8_base -lv8_libbase -lv8_external_snapshot -lv8_libplatform -lv8_libsampler -licuuc -licui18n -lrt -ldl
You may need -Wl,--start-group
and -Wl,--end-group
around the actual v8 libraries in your target_link_libraries()
.
If your objective is to replicate the Makefile, the libraries in your Makefile "LIBV8" are not the same as the libraries in your CMake "LIBV8".