delaere / VeheMencE

User friendly vme control library.
Other
1 stars 2 forks source link

CMAKE needs some tweaks #18

Open delaere opened 4 years ago

delaere commented 4 years ago

J'ai compilé vehemence sur la machine µTCA mais j'ai eu un peu de mal et il y aura peut-etre des choses à fixer dans CMAKE.

Evidemment les versions de cmake, boost et gcc sur centos sont trop vieilles mais on a pu installer des versions plus récentes avec les devtoolssets.

Malheureusement cmake ne détecte pas les nouvelles versions et malgré les requirements:

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Il ne signale pas de problèmes avant la compilation. J'ai donc ajouté les variable a la main:

# use proper boost version
set(BOOST_INCLUDEDIR "/usr/include/boost169")
set(BOOST_LIBRARYDIR "/usr/lib64/boost169")

# use proper c++ compiler
set(CMAKE_CXX_COMPILER "/opt/rh/devtoolset-8/root/usr/bin/g++")
set(CMAKE_CXX_FLAGS "-std=c++17")

Et il commence bien la compilation normalement, mais il plante au link avec:

[ 84%] Building CXX object examples/CMakeFiles/exampleFull.dir/exampleFull.cpp.o
Linking CXX executable exampleFull
/opt/rh/devtoolset-8/root/usr/libexec/gcc/x86_64-redhat-linux/8/ld: CMakeFiles/exampleFull.dir/exampleFull.cpp.o: undefined reference to symbol 'pthread_rwlock_wrlock@@GLIBC_2.2.5'
//lib64/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [examples/exampleFull] Error 1

​J'ai donc du ajouter (google est mon ami):

set(CMAKE_CXX_FLAGS "-std=c++17 -pthread")

Voilà, après tout cela c'est compilé, mais il faudra juste comprendre pourquoi cmake ne signale pas le manque de C++17 et pourquoi j'ai du ajouter -pthread aux flags. Pour boost, on sait que findboost n'est pas une flèche et je ne suis pas étonné d'avoir du ajouter les variables à la main 😄

delaere commented 4 years ago

would need cmake 3.1 anyway