cmake in linux ubuntu
-
Hello, i know this is a cmake problem but its encountered with QT.It runs within windows and now I want to compile it first time within linux mint.QT is 5.12.2 an Qt creator is 4.12.2
I know for shure that librosco.dll is in my source folder and have set it to read/write/execute for root group and user. Here is part of the cmalelist file.Everytime i get librosco not found.What do I have to change (write)
Thank you in advance.else() message (STATUS "Defaulting to Linux build environment.") file ( WRITE librosco ) # file(WRITE "${LIBROSCO}/${CMAKE_STATIC_LIBRARY_PREFIX}librosco ${CMAKE_STATIC_LIBRARY_SUFFIX}" ) find_library(LIBROSCO NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}librosco ${CMAKE_SHARED_LIBRARY_SUFFIX} HINTS "${CMAKE_SOURCE_DIR}" NO_DEFAULT_PATH NO_CMAKE_PATH NO_CMAKE_SYSTEM_PATH NO_Package_ROOT_PATH ) # check if we found the library # message(STATUS "LIB_ROSCO: [${LIB_ROSCO}]") message(STATUS "path: ${LIBROSCO}") target_link_libraries (${PNAME} ${LIB_ROSCO} Qt5::Widgets)code_text -
Hi,
this is my code now:message (STATUS "Defaulting to Linux build environment.") set(CMAKE_INCLUDE_CURRENT_DIR ON) file(WRITE "${librosco} ${CMAKE_STATIC_LIBRARY_PREFIX}LIBROSCO ${CMAKE_STATIC_LIBRARY_SUFFIX}.dll" ) find_file( "${librosco}" NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}LIBROSCO ${CMAKE_SHARED_LIBRARY_SUFFIX}.dll HINTS "${CMAKE_SOURCE_DIR}/lib" NO_DEFAULT_PATH NO_CMAKE_PATH NO_CMAKE_SYSTEM_PATH NO_Package_ROOT_PATH ) # check if we found the library message(STATUS "LIB_ROSCO: [${LIBROSCO}]") target_link_libraries (${PNAME} ${LIBROSCO} Qt5::Widgets)cmake is running without failure but librosco is not found
Defaulting to Linux build environment. LIB_ROSCO: [] Configuring done Generating done Das CMake-Projekt wurde erfolgreich ausgewertet.what can i do next?
-
Hi,
.dll files are only for Windows. Do you have a Linux build of that library ?
-
Hi SGaist,
thank you, at first glance this was easy.Now I have a librosco.so, librosco.so.2 and librosco.so.2.0.0 in my source folder and /source/lib they are set to rwx/rwx/rw but files are not found. -
librosco is built and installed with cmake so it is super easy.
After you built librosco just callsudo make installthen add the path where the library was installed toCMAKE_PREFIX_PATHif it's not a directory already in yourPATHvariable.
Now you can just usefind_package(librosco) -
Hi Vronin,
I could install librosco but when I search for the package i get this answer
:```
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
Defaulting to Linux build environment.
CMake Warning at CMakeLists.txt:229 (find_package):
By not providing "FindLIBROSCO.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "LIBROSCO",
but CMake did not find one.Could not find a package configuration file provided by "LIBROSCO" with any
of the following names:LIBROSCOConfig.cmake librosco-config.cmakeAdd the installation prefix of "LIBROSCO" to CMAKE_PREFIX_PATH or set
"LIBROSCO_DIR" to a directory containing one of the above files. If
"LIBROSCO" provides a separate development package or SDK, be sure it has
been installed.when I search for the library i get this fault:CMake Error at CMakeLists.txt:229 (find_library):
find_library called with incorrect number of argumentsthe same when i write find_file. When i read the man for find_library or find_file only one argument is needed , the rest is optional. Am I right? -
Hi Vronin,
I could install librosco but when I search for the package i get this answer
:```
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
Defaulting to Linux build environment.
CMake Warning at CMakeLists.txt:229 (find_package):
By not providing "FindLIBROSCO.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "LIBROSCO",
but CMake did not find one.Could not find a package configuration file provided by "LIBROSCO" with any
of the following names:LIBROSCOConfig.cmake librosco-config.cmakeAdd the installation prefix of "LIBROSCO" to CMAKE_PREFIX_PATH or set
"LIBROSCO_DIR" to a directory containing one of the above files. If
"LIBROSCO" provides a separate development package or SDK, be sure it has
been installed.when I search for the library i get this fault:CMake Error at CMakeLists.txt:229 (find_library):
find_library called with incorrect number of argumentsthe same when i write find_file. When i read the man for find_library or find_file only one argument is needed , the rest is optional. Am I right?@Leopold said in cmake in linux ubuntu:
I could install librosco
In what folder?
I think you missed this part:
@VRonin said in cmake in linux ubuntu:
add the path where the library was installed to CMAKE_PREFIX_PATH if it's not a directory already in your PATH variable.
-
Hi I did the sudo make install in the librosco build folder there it was the makefile
adding to LD_LIBRARY_PATH was activated.
I do not know where it is installed.@Leopold said in cmake in linux ubuntu:
I do not know where it is installed
You should see the path in the output of "make install"
-
Yes, i have it in the code
message (STATUS "Defaulting to Linux build environment.") set(CMAKE_INCLUDE_CURRENT_DIR ON) set( CMAKE_PREFIX_PATH =/usr/lib) # file(WRITE "${LIBROSCO} )#${CMAKE_STATIC_LIBRARY_PREFIX}librosco ${CMAKE_STATIC_LIBRARY_SUFFIX}so*" ) find_library([${LIBROSCO}] HINTS /usr/lib) # check if we found the library message(STATUS "LIB_ROSCO:${LIBROSCO}") message(PATH "LIB_ROSCO:${LIBROSCO}") target_link_libraries (${PNAME} ${LIBROSCO} Qt5::Widgets)this didn help so I exported the command and have it there```
leopold@leopold-Mint:~$ export
declare -x CINNAMON_VERSION="4.4.8"
declare -x CMAKE_PREFIX_PATH="/usr/lib"
declare -x COLORTERM="truecolor"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DEFAULTS_PATH="/usr/share/gconf/cinnamon.default.path"
declare -x DESKTOP_SESSION="cinnamon"
declare -x DISPLAY=":0"
declare -x GDMSESSION="cinnamon"
declare -x GDM_LANG="de_DE"
declare -x GJS_DEBUG_OUTPUT="stderr"
declare -x GJS_DEBUG_TOPICS="JS ERROR;JS LOG"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GNOME_TERMINAL_SCREEN="/org/gnome/Terminal/screen/3383bf57_7307_4aea_ada8_299ad807e660"
declare -x GNOME_TERMINAL_SERVICE=":1.74"
declare -x GPG_AGENT_INFO="/run/user/1000/gnupg/S.gpg-agent:0:1"
declare -x GTK_MODULES="gail:atk-bridge"
declare -x GTK_OVERLAY_SCROLLING="1"no help again and have it as rwx/rwx/rwx in /usr/lib still:Defaulting to Linux build environment.
LIB_ROSCO:LIBROSCO-NOTFOUND
PATHLIB_ROSCO:LIBROSCO-NOTFOUND
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
LIBROSCO
linked by target "mems-rosco2.2.6" in directory /home/leopold/QT-examples/mems-rosco2.2.6Configuring incomplete, errors occurred!
Now my question: Is this caused by an other entry in the cmakelists file?
Here it is:cmake_minimum_required (VERSION 2.8.11) set (CMAKE_COMPILER_IS_GNUCC) set (PROJECTNAME "MEMS-rosco2.2.6") string (TOLOWER ${PROJECTNAME} PNAME) project (${PNAME}) add_definitions (-DPROJECTNAME=\"${PROJECTNAME}\") set (VER_MAJOR 0) set (VER_MINOR 5) set (VER_PATCH 0) SET (Qt5LinguistTools_DIR /opt/Qt/5.12.2/gcc_64/lib/cmake/Qt5LinguistTools CACHE PATH "Qt5LinguistTools_DIR") FIND_PACKAGE( Qt5LinguistTools ) set (LANGUAGES transfile_en transfile_esp transfile_fr transfile_ge ) set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM 1) qt5_create_translation(TRANSLATION_MESSAGES ${FILES_TO_TRANSLATE} ${TRANSLATION_FILES}) qt5_add_translation(TRANSLATION_QM ${TRANSLATION_FILES}) add_custom_target(translations_update DEPENDS ${TRANSLATION_MESSAGES}) add_custom_target(translations DEPENDS ${TRANSLATION_QM}) set (CMAKE_INCLUDE_CURRENT_DIR ON) set (CMAKE_AUTOMOC ON) set (CPACK_SOURCE_GENERATOR "TGZ") set (CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VER_MAJOR}.${VER_MINOR}.${VER_PATCH}-src") set (CPACK_SOURCE_IGNORE_FILES ".*~$" ".git" ".gitignore" ".*swp$" ".*zip$" ".*gz$" ".*deb$" "Makefile.*" "moc_" "qrc_" "^CPack.*" "_CPack_Packages" "CPackConfig.cmake" "CPackSourceConfig.cmake" "CMakeFiles" "CMakeCache.txt" "CMakeLists.txt.user*" "cmake_install.cmake" "install_manifest.txt" "README.TXT" "LICENSE.TXT" "build/" "build-win32/" "settings.ini" "debug" "release" "object_script.*") configure_file ( "help.html.in" "${CMAKE_SOURCE_DIR}/help.html" ) set(CMAKE_INSTALL_RPATH "/usr/local/lib") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) find_package (Qt5Widgets REQUIRED) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") include_directories ("${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/lib" "${CMAKE_SOURCE_DIR}/qledindicator" "${CMAKE_SOURCE_DIR}/analogwidgets" "${CMAKE_CURRENT_BINARY_DIR}" "${Qt5Widgets_INCLUDE_DIRS}" ) qt5_wrap_ui (UI_SOURCE mainwindow.ui) qt5_add_resources (RG_RESOURCE resources.qrc) add_definitions ("-DVER_MAJOR=${VER_MAJOR}" "-DVER_MINOR=${VER_MINOR}" "-DVER_PATCH=${VER_PATCH}") add_executable (${PNAME} main.cpp memsinterface.cpp helpviewer.cpp logger.cpp serialdevenumerator.cpp mainwindow.cpp aboutbox.cpp optionsdialog.cpp qledindicator/qledindicator.cpp analogwidgets/led.cpp analogwidgets/functions.cpp analogwidgets/widgetwithbackground.cpp analogwidgets/manometer.cpp analogwidgets/abstractmeter.cpp ${UI_SOURCE} ${RG_RESOURCE}) #set (LIBROSCO_PATH "../librosco") #include_directories ("${LIBROSCO_PATH}/include") if (MINGW) message (STATUS "Found Windows/MinGW platform.") # prevent the final executable from launching a terminal window in parallel with the main GUI set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mwindows") # -fPIC appears to be redundant when building win32 binaries, so disable that flag string (REGEX REPLACE "-fPIC" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) set (LIBROSCO_PATH "$ENV{SystemDrive}/mems-rosco") include_directories ("${LIBROSCO_PATH}/include") include_directories ("/usr/local/lib/include") message (STATUS "Defaulting installation path to: $ENV{SystemDrive}/${PNAME}") set (CMAKE_INSTALL_PREFIX "$ENV{SystemDrive}/${PNAME}") set (EXE_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PNAME}.exe") # When we call find_library() below, we're only looking for DLLs, so set the suffix list appropriately set (CMAKE_FIND_LIBRARY_SUFFIXES ".dll") message (STATUS "Limiting find_library() suffixes to ${CMAKE_FIND_LIBRARY_SUFFIXES}") find_library (LIBGCC NAMES libgcc_s_sjlj-1 libgcc_s_seh-1 libgcc_s_dw2-1) if (LIBGCC) message (STATUS "Found libgcc at ${LIBGCC}") else () message (SEND_ERROR "Could not find libgcc!") endif () find_library (LIBSTDCPP libstdc++-6) if (LIBSTDCPP) message (STATUS "Found libstdc++ at ${LIBSTDCPP}") else () message (SEND_ERROR "Could not find libstdc++!") endif () find_library (ZLIB zlib1) if (ZLIB) message (STATUS "Found zlib1 at ${ZLIB}") else () message (SEND_ERROR "Could not find zlib1!") endif () find_library (QTCORE_DLL Qt5Core) if (QTCORE_DLL) message (STATUS "Found QtCore at ${QTCORE_DLL}") else () message (SEND_ERROR "Could not find Qt5Core.dll! Check that the Qt5 bin/ directory (or the qtbase/bin/ directory) is in your PATH.") endif () find_library (QTGUI_DLL Qt5Gui) if (QTGUI_DLL) message (STATUS "Found QtGui at ${QTGUI_DLL}") else () message (SEND_ERROR "Could not find Qt5Gui.dll! Check that the Qt5 bin/ directory (or the qtbase/bin/ directory) is in your PATH.") endif () find_library (QTWIDGETS_DLL Qt5Widgets) if (QTGUI_DLL) message (STATUS "Found QtWidgets at ${QTWIDGETS_DLL}") else () message (SEND_ERROR "Could not find Qt5Widgets.dll! Check that the Qt5 bin/ directory (or the qtbase/bin/ directory) is in your PATH.") endif () find_library (QWINDOWS_DLL qwindows) if (QWINDOWS_DLL) message (STATUS "Found Qt qwindows platform plugin at ${QWINDOWS_DLL}") else () message (SEND_ERROR "Could not find Qt qwindows platform plugin!") endif () find_library (LIPWINPTREAD libwinpthread-1) if (LIPWINPTREAD) message (STATUS "Found libwinptread plugin at ${LIPWINPTREAD}") else () message (SEND_ERROR "Could not find winptread platform plugin!") endif () find_library(LIBROSCO_DLL librosco PATHS ${LIBROSCO_PATH} ${CMAKE_INSTALL_PREFIX}) if (LIBROSCO_DLL) message (STATUS "Found librosco at ${LIBROSCO_DLL}") else () message (SEND_ERROR "Could not find librosco.dll! Check that it exists in one of the directories in your PATH.") endif () #target_link_libraries (${PNAME} ${LIBROSCO_DLL} Qt5::Widgets) # convert Unix-style newline characters into Windows-style configure_file ("${CMAKE_SOURCE_DIR}/README" "${CMAKE_BINARY_DIR}/README.TXT" NEWLINE_STYLE WIN32) configure_file ("${CMAKE_SOURCE_DIR}/LICENSE" "${CMAKE_BINARY_DIR}/LICENSE.TXT" NEWLINE_STYLE WIN32) install (FILES "${CMAKE_BINARY_DIR}/README.TXT" "${CMAKE_BINARY_DIR}/LICENSE.TXT" DESTINATION "doc") install (FILES ${EXE_FILE} ${LIBGCC} ${LIBSTDCPP} ${QTCORE_DLL} ${QTGUI_DLL} ${QTWIDGETS_DLL} ${LIBROSCO_DLL} ${LIPWINPTREAD} ${ZLIB} DESTINATION ".") install (FILES ${QWINDOWS_DLL} DESTINATION "platforms") set (CPACK_GENERATOR "ZIP") set (CPACK_PACKAGE_NAME ${PROJECT_NAME}) set (CPACK_INCLUDE_TOPLEVEL_DIRECTORY 0) set (CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VER_MAJOR}.${VER_MINOR}.${VER_PATCH}-${CMAKE_SYSTEM_NAME}") include (CPack) else() message (STATUS "Defaulting to Linux build environment.") set(CMAKE_INCLUDE_CURRENT_DIR ON) set( CMAKE_PREFIX_PATH =/usr/lib) # file(WRITE "${LIBROSCO} )#${CMAKE_STATIC_LIBRARY_PREFIX}librosco ${CMAKE_STATIC_LIBRARY_SUFFIX}so*" ) find_library([${LIBROSCO}] HINTS /usr/lib) # check if we found the library message(STATUS "LIB_ROSCO:${LIBROSCO}") message(PATH "LIB_ROSCO:${LIBROSCO}") target_link_libraries (${PNAME} ${LIBROSCO} Qt5::Widgets) set (CMAKE_SKIP_RPATH TRUE) set (CMAKE_INSTALL_PREFIX "/usr") set (EXE_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PNAME}") # set the installation destinations for the header files, # shared library binaries, and reference utility install (FILES ${EXE_FILE} DESTINATION "bin" PERMISSIONS OWNER_READ OWNER_EXECUTE OWNER_WRITE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) install (DIRECTORY DESTINATION "share/doc/${PNAME}" DIRECTORY_PERMISSIONS OWNER_READ OWNER_EXECUTE OWNER_WRITE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) install (FILES "${CMAKE_SOURCE_DIR}/README" "${CMAKE_SOURCE_DIR}/LICENSE" DESTINATION "share/doc/${PNAME}" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) # set the architecture flag that will be used by the Debian package builder if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") set (CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64) elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "i686") set (CPACK_DEBIAN_PACKAGE_ARCHITECTURE i386) endif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") set (CPACK_GENERATOR "DEB") set (CPACK_PACKAGE_NAME ${PROJECT_NAME}) set (CPACK_PACKAGE_VERSION_MAJOR ${VER_MAJOR}) set (CPACK_PACKAGE_VERSION_MINOR ${VER_MINOR}) set (CPACK_PACKAGE_VERSION_PATCH ${VER_PATCH}) set (CPACK_DEBIAN_PACKAGE_MAINTAINER "Colin Bourassa <colin.bourassa@gmail.com>") set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Graphical display for data read from Rover MEMS 1.6 (Modular Engine Management System)") set (CPACK_DEBIAN_PACKAGE_SECTION "Science") set (CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.13), libstdc++6 (>= 4.6.3), librosco (>= 0.1.0), libqt5core5a (>= 5.0.2), libqt5gui5 (>= 5.0.2), libqt5widgets5 (>= 5.0.2)") set (CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${VER_MAJOR}.${VER_MINOR}.${VER_PATCH}-${CMAKE_SYSTEM_NAME}-${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}") set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") set (CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README") include(CPack) endif() -
@Leopold said in cmake in linux ubuntu:
find_library([${LIBROSCO}]
This is wrong. See the documentation - you need to pass a variable, not the content of a variable
-
-
As I said:
@VRonin said in cmake in linux ubuntu:
use find_package(librosco)
You are using
find_librarythat tryes to link to a dll (which is already wrong) and it contains no infos on the dependancies
set( CMAKE_PREFIX_PATH =/usr/lib)Remove this line, it just creates a mess as it might remove search paths.
CMAKE_PREFIX_PATHshould be set on the command line (if you are using Qt Creator you have to set it in the project configuration, on the left vertical bar, the wrench icon)./usr/libis already inPATHso you should actually do nothing -
If I configure directly with cmake I get this error:
CMake Warning at CMakeLists.txt:234 (find_package): By not providing "Findlibrosco.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "librosco", but CMake did not find one. Could not find a package configuration file provided by "librosco" with any of the following names: libroscoConfig.cmake librosco-config.cmake Add the installation prefix of "librosco" to CMAKE_PREFIX_PATH or set "librosco_DIR" to a directory containing one of the above files. If "librosco" provides a separate development package or SDK, be sure it has been installed. PATHLIB_ROSCO: LIB_ROSCO: Configuring done