Articles of cmake

使用CLion编译nginx(通过CMake)

我试图通过CLion编译nginx 1.9.5来进行debugging。 由于CLion目前不支持vanilla Makefiles / Autoconf,我运行了autoconf auto/configure脚本来生成一个有效的Makefile,在CLion中打开了项目,然后做了一个非常简单的CMakeLists.txt来将CLion构build委托给autoconf生成的Makefile如通过使用本地生成文件的CLion而不是CMake )。 不幸的是,我的简单CMakeLists.txt似乎有一个缺陷,因为当我重新加载并运行CLion的构build命令时,CMake似乎还生成了一个新的Makefile,并运行这个空的Make任务,而不是运行$ {nginx_SOURCE_DIR}中的一个。 我如何更改下面的CMakeLists.txt文件委托给nginx的Makefile,而不是重新生成一个新的? cmake_minimum_required(VERSION 2.8.4) project(nginx) add_custom_target(nginx ALL COMMAND make -C ${nginx_SOURCE_DIR} CLION_EXE_DIR=${PROJECT_BINARY_DIR})

不能在Linux Mint上安装QT4

我想在linux mint上用CMAKE编译vpnshrew。 然而,QT4不见了,我已经尝试了一切都没有成功。 起始行是这个依赖错误: $ sudo apt-get install libqt4-core Reading package lists… Done Building dependency tree Reading state information… Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been […]

cmake强制并行.Co编译链接之前

我有一个包含5个库的项目,每个库都来自10个C ++源文件,然后是10个依赖库的可执行文件。 每个图书馆也依赖于前一个。 使用CMake,然后在48核心Ubuntu机器上运行“make -j 50”,我首先必须等待每个库build立在10个或更less的内核上(大多数情况下更less,因为一个.C文件需要几分钟才能编译),然后我的可执行文件并行构build。 我想首先在所有的.C源文件(我知道如何把这个列表放入一个CMakevariables)中并行运行所有.Co编译,然后按照依赖关系指定的顺序运行链接器。 有没有办法做到这一点与CMake,例如通过设置假目标或类似的东西? (我只想重新编译已被修改的.C文件)。

在哪里安装了包库和头文件

在Ubuntu下载和安装一个软件包后,如何检查库和头文件的写入位置? 我相信这与包的.pc文件有关,但我不知道如何find该文件。 例如,我已经下载了PCL(Point Cloud Library)包,然后在一个示例CMakeLists.txt文件中给出了以下内容: include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) 这些环境variables在哪里定义,我怎么看? 如果我从源代码而不是通过一个包编译库,这是否会有所不同? 将自动创build一个.pc文件?

使用共享对象和符号链接构build安装包

我正在开发一个项目,我们正在开始发布二进制文件。 我们使用CMake来生成构build文件,并使用CPack来创build二进制文件。 我们的二进制工作,但我们遇到共享对象的问题。 从本质上讲,许多问题是由系统上的符号链接引起的,尤其是对于具有多个链接的共享对象。 所以,假设ldd(或otool)的RPATH结果包含一些可执行文件libmpich.so.10,并且已经从cmake链接了/usr/lib/x86_64-linux-gnu/libmpich.so,并且这些文件是这样相关的: /usr/lib/x86_64-linux-gnu/libmpich.so -> libmpich.so.10 /usr/lib/x86_64-linux-gnu/libmpich.so.10 -> libmpich.so.10.0.4 /usr/lib/x86_64-linux-gnu/libmpich.so.10.0.4 现在,由于某些原因,RPATH使用中间链接(so.10),但libmpich.so(或get_filename_component(… REALPATH))上的readlink返回libmpich.so.10.0.4。 所以,如果我以名称libmpich.so.10.0.4或者libmpich.so.10.0.4安装libmpich.so.10.0.4(或者创build从一个到另一个的符号链接),我仍然错过了RPATH中要求的库。 在处理这些问题时,我一直在玩“重击”,并且/或者使用文件glob来尝试抓取中间链接,但是我想要做更强大的事情。 任何人都使用一个好的devise模式呢? 我一直在寻找使用像GET_PREREQUISITES这样的函数,但是那些需要被构build的对象,所以我需要将它们添加到安装脚本中……并且感觉它们应该是更好的方式。 -Jameson PS我也喜欢用cmake或者一般的方法来寻找构build二进制文件的最佳实践指南。 我们正在Windows,Linux和Mac上生成二进制文件。 如果你知道一些好的链接,请将其发布。

奇怪的CMake在Linux上共享lib连接问题

我在Linux上看到了一个奇怪的链接问题,它使用了一个跨平台的库项目,它使用CMake从同一个源码树创build一个OS X Framework和一个Linux共享库。 该项目的跨平台方面在过去(两年前左右)运行良好,但从那以后,我们专门在OS X上进行了开发工作。暂时放弃Linux的原因是开发人员短缺:所有那些仍然使用OS X的人 – 没有任何技术上的原因,在Linux上build立多年的源码。 有一个潜在的相关例外(稍后会有更多的例外),同时我们的来源也没有根本性的变化。 当然,Linux已经进步了,当然,当我们回到那里的时候,当然也有一些小的障碍。 像新版本的编译器抱怨过去没有抱怨过的事情(可疑的转换,void Voodoo等等)。 这些问题在短期内得到解决。 整个源代码树现在在Mint 17.1上再次编译,并带有一些绝对无害的剩余警告。 但是,连接失败了一个相当奇怪的信息: Linking CXX shared library lib<ourLibName>.so CMakeFiles/<file1>.co:1:1: error: stray '\177' in program CMakeFiles/<file1>.co:1:1: error: stray '\2' in program CMakeFiles/<file2>.co:1:1: error: stray '\213' in program (and so on, thousands of times, with seemingly random values in the quotes for all the […]

Qt中的cmake无法在命令行执行cmake的同时find第三方库

我在OpenSceneGraph(OSG-3.4.0)库中使用Qt(5.5.1)。 我有一个基本的“HelloWorld”项目,可以在Windows 7上的另一台机器上从Qt编译和工作。但是当我尝试在Linux(Lubuntu-14.04)上编译同一个项目时,Qt中的CMake找不到OSG库。 最奇怪的是,当我从命令行运行cmake时,所有库都find了 – 没有问题 。 所以,这就是我在我的CMake项目文件中search库的方法: # … find_package(OpenSceneGraph REQUIRED COMPONENTS osgDB osgGA osgUtil osgViewer) include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}) #… target_link_libraries( ${PROJECT_NAME} ${OPENSCENEGRAPH_LIBRARIES} ) 我也包括一些Qt库,他们没有发现问题。 当我在Qt中检查CMake的位置(在“ pipe理工具包…”菜单中)时,它显示出与我从命令行运行which cmake时相同的path。 所以, cmake可执行文件是相同的,位于/usr/bin/ 。 我的cmake –version是2.8.12.2。 我的.zshrc包含所有已安装OSG库的path(如OSG安装手册中所述): export OPENTHREADS_INC_DIR="/usr/local/include" export OPENTHREADS_LIB_DIR="/usr/local/lib64:/usr/local/lib" export PATH="$OPENTHREADS_LIB_DIR:$PATH" export LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH" export OSG_FILE_PATH="/usr/local/OpenSceneGraph/data:/usr/local/OpenSceneGraph/data/Images" 我发现我的问题的时间解决scheme: 首先我从命令行运行cmake ; 那么我给Qt的只是build立文件夹的位置。 这样一切正常。 但是,我想知道问题在哪里,以便我可以从Qt运行cmake; 几天来我一直在嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗡嗒嗒嗒嗒嗒嗒, 任何提示和build议表示赞赏。 UPD :这里是我尝试从Qt运行CMake时得到的错误信息: — Could […]

将“Qt5UiTools”的安装前缀添加到CMAKE_PREFIX_PATH中

我正在使用cmake版本3.2.2,因为它是代码的要求我正在尝试构buildMikTex源代码,但得到不同的错误,我不知道在Ubuntu 14.04 LTS。 当我从源代码文件夹“miktex-2.9-2015-12-22”的目录中运行cmake -G "Unix Makefiles"命令时,出现以下错误: /usr/lib/x86_64-linux-gnu/cmake/Qt5/Qt5Config.cmake:26(find_package)处的CMake错误:无法find具有以下任一名称的“Qt5UiTools”提供的软件包configuration文件: Qt5UiToolsConfig.cmake qt5uitools-config.cmake 将“Qt5UiTools”的安装前缀添加到CMAKE_PREFIX_PATH或将“Qt5UiTools_DIR”设置为包含上述文件之一的目录。 如果“Qt5UiTools”提供了一个单独的开发包或SDK,请确保它已经安装。 调用堆栈(最近调用优先):CMakeLists.txt:466(find_package) – configuration不完整,发生错误!

Qt5 linux如何设置窗口图标图像

我有一个用Qtdevise器devise的用户界面,并用c ++编写了代码。 我正在使用catkin ,这只是cmake,来build立我的项目。 目前当程序启动时,应用程序图标看起来像, 。我想这是一个我指定的形象,但一直无法弄清楚如何得到这个工作。 我的项目目录结构如下所示 package |–CMakeLists.txt |–src |–main.cpp |–MainWindow.cpp |–resources |–images |–kitty.png |–icons.qrc |–include |–MainWindow.hpp |–ui |–MainWindow.ui 我的CMakeLists.txt文件看起来像, cmake_minimum_required(VERSION 2.8.7) project(shared_memory_transport_sliderboard) find_package(catkin REQUIRED) find_package(Qt5Widgets REQUIRED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}") add_definitions(${Qt5Widgets_DEFINITIONS}) set(INCLUDES_DIR ${PROJECT_SOURCE_DIR}/include) set(SOURCES_DIR ${PROJECT_SOURCE_DIR}/src) catkin_package( INCLUDE_DIRS ${INCLUDES_DIR} DEPENDS Qt5Widgets ) # c++11 include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") else() message(FATAL_ERROR "The compiler […]

CMake:如何使用add_custom_command(…)中的条件

我想使用Linux,如果CMakeLists.txt中的条件由add_custom_command(…),我需要运行这些条件,并在makefile做一些判断。 喜欢这个: cmake_minimum_required(VERSION 2.8) add_custom_target(temp_target ALL) add_custom_command(TARGET temp_target PRE_BUILD COMMAND if ["a" != "b"]; then echo 1; fi; VERBATIM ) 我应该怎么做,如果我想使用 if ["a" != "b"]; then echo 1; fi; 什么时候make makefile? 非常感谢您的帮助!