Tag: cmake

使cmake库可以被其他cmake软件包自动访问

我有一个项目可以生成一个库: project (myCoolLibrary) ADD_LIBRARY(my_cool_library SHARED ${mysources_SRC}) 另一个应该使用这个库的项目: find_package (myCoolLibrary REQUIRED) INCLUDE_DIRECTORIES("${myCoolLibrary_INCLUDE_DIRS}" ) add_executable(myCoolExe ${my_sources_SRC} ) TARGET_LINK_LIBRARIES(myCoolExe ${myCoolLibrary_LIBRARIES} ) 有没有办法,我可以改变第一个文件,以便第二个文件自动工作? 通过在第一个文件上运行cmake然后在输出上运行make,然后在第二个文件上运行cmake,cmake是否能够find包? 我只是把第一个项目的构build地址提供给第二个包的答案也是可以接受的。

cmake和libpthread

我正在运行RHEL 5.1并使用gcc 。 我如何告诉cmake添加-pthread编译和链接?

如何在CMake中激活C ++ 11?

当我尝试运行CMake生成的makefile来编译我的程序时,出现错误 C ++ 98模式不支持基于范围的循环。 我尝试添加add_definitions(-std=c++0x)到我的CMakeLists.txt ,但它没有帮助。 我也试过这个: if(CMAKE_COMPILER_IS_GNUCXX) add_definitions(-std=gnu++0x) endif() 当我做g++ –version ,我得到: g ++(Ubuntu / Linaro 4.6.1-9ubuntu3)4.6.1 我也试过SET(CMAKE_CXX_FLAGS "-std=c++0x") ,这也不起作用。 我不明白如何使用CMake激活C ++ 11function。

CMake:如何设置Source,Library和CMakeLists.txt的依赖关系?

我有几个项目(全部使用来自同一个源代码树结构的CMake构build)都使用自己的混合数十个支持库。 所以我提出了如何在CMake中正确设置这个问题。 到目前为止,我只find了CMake如何正确创build目标之间的依赖关系,但我仍然在设置所有与全局依赖关系(项目级别都知道这一切)或与本地依赖关系(每个子级目标只处理自己的依赖)。 这里是我的目录结构和我目前使用CMake和本地依赖关系的例子(这个例子只显示了一个可执行项目App1 ,但实际上有更多的App2 , App3 ,…): Lib +– LibA +– Inc +– ah +– Src +– a.cc +– CMakeLists.txt +– LibB +– Inc +– bh +– Src +– b.cc +– CMakeLists.txt +– LibC +– Inc +– ch +– Src +– c.cc +– CMakeLists.txt App1 +– Src +– main.cc +– CMakeLists.txt LIB /力霸/的CMakeLists.txt include_directories(Inc […]

CMake:parsing文件的哪个Order(Cache,Toolchain,…)?

这似乎是一个微不足道的问题,因为CMake是一种脚本语言,一般的答案是:严格的顺序。 但是我遇到过几种情况,CMake在parsing某些文件的时候或者以何种顺序重要。 所以我想知道: 是否有可用的文档描述文件(包括内部CMake文件)的parsing顺序? 文件顺序取决于CMake版本或一些CMake选项/设置/环境。 select的发生器或主机环境? 我遇到的情况到目前为止,上面的信息是重要的: 在编译器被识别之前,工具链文件被parsing,所以你必须首先在工具链文件中/在工具链文件中填充某些CMakevariables: 具有特定链接器的cmake交叉编译不会将parameter passing给armlink 工具链文件被多次parsing,因此例如从工具链文件中显示多次打印消息: cmake toolchain包含多个文件 可以从主CMakeLists.txt文件之外的范围调用variables监视器已parsing: 在“configuration”步骤完成之前的最后一步,执行CMake中的命令或macros 也许你知道更多。 要find答案,我已经尝试了以下内容:我已经安装了一个简单的主CMakeList.txt,如下所示,并运行cmake –trace …来分析parsing顺序。 cmake_minimum_required(VERSION 2.8) include(BeforeProjectCmd.cmake) project(ParserTest CXX) add_subdirectory(LibTarget1) add_subdirectory(LibTarget2) add_executable(ExeTarget Test.cpp) variable_watch(CMAKE_BACKWARDS_COMPATIBILITY) 当我然后运行如cmake –debug-output –trace -G"Visual Studio 12 2013" -DCMAKE_TOOLCHAIN_FILE:FILE_PATH=Toolchain.txt我得到了一个长的痕迹,我试图总结: # begin try to read CMakeCache.txt ${CMAKE_BINARY_DIR}/CMakeCache.txt PreLoad.cmake ${CMAKE_BINARY_DIR}/PreLoad.cmake # end try to read ┌ CMakeLists.txt(1): cmake_minimum_required(VERSION 2.8 […]

如何在cmake文件中添加链接器或编译标志?

我正在使用arm-linux-androideabi-g++编译器。 当我尝试编译一个简单的“hello world”程序时,它编译得很好。 当我通过在代码中添加一个简单的exception处理来testing它时,它也可以工作(在添加-fexceptions ..我想它在默认情况下是禁用的) 这是一个Android设备,我只想使用cmake而不是ndk-build 例如 – first.cpp #include <iostream> using namespace std; int main() { try{ } catch(…) { } return 0; } ./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions 它工作没有问题.. 问题 ..我想用cmake文件编译文件。 我想添加-fexceptions作为一个标志。 我试着用 set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" ) 和 set ( CMAKE_C_FLAGS "fexceptions") 它仍然显示一个错误。

CMakeLists.txt中没有使用CMAKE_BUILD_TYPE

我有麻烦设置我的默认生成configuration释放,在我的CMakeLists.txt文件我设置CMAKE_BUILD_TYPE在文件的顶部 #enable Release ALWAYS, configure vars set(CMAKE_BUILD_TYPE Release) set(EXECUTABLE_NAME "ParticleSimulator") set(VERSION_MAJOR 0) set(VERSION_MINOR 2) 但是在构build我的项目并打开解决scheme时,我始终使用Debug模式,与我在CMakeLists文件中指定的模式相反。 我究竟做错了什么? 我已经看了一些其他的问题,但没有看到这个问题的具体内容。 CMakeLists.txt的要点

CMake + GoogleTest

我刚刚下载了googletest,用CMake生成了它的makefile并构build了它。 现在,我需要在我的testing项目中使用它。 对于CMake,我build议不要直接指向gtest库(使用include _directories或link_directories ),而是使用find_package()来代替。 问题是,gtest makefile没有生成安装目标。 我无法理解find_package(GTest REQUIRED)如何在没有某种安装的情况下工作。 另外,将gtest文件夹作为子文件夹放在我的项目中是不可能的。 感谢您的帮助。

CMake链接到外部库

如何让CMake将可执行文件链接到不在同一个CMake项目中构build的外部共享库? 只是做target_link_libraries(GLBall ${CMAKE_BINARY_DIR}/res/mylib.so)给出错误 make[2]: *** No rule to make target `res/mylib.so', needed by `GLBall'. Stop. make[1]: *** [CMakeFiles/GLBall.dir/all] Error 2 make: *** [all] Error 2 (GLBall is the executable) 在我将库复制到二进制目录bin/res 。 我试着用find_library(RESULT mylib.so PATHS ${CMAKE_BINARY_DIR}/res) 这与RESULT-NOTFOUND失败。

用GLOB全局指定源文件?

CMake提供了几种方法来指定目标的源文件。 一个是使用globbing( 文档 ),例如: FILE (GLOB dir/*) 另一个是分别指定每个文件。 哪种方式更喜欢? 全球化似乎很容易,但我听说它有一些缺点。