我一直在使用ClionIDE并试图获得一个简单的GTK程序来使用它进行编译。我发现Clion使用CMake,所以问题出在这里而不是IDE本身。我能够直接从终端成功编译和运行程序,但使用CMake却没有成功。问题很简单:当我尝试编译时,编译器找不到位于/usr/include/gtk-3.0/gtk/gtk.h中的gtk.h。我发现命令编译器参数'pkg-config--libs--cflagsgtk+-3.0'以某种方式修复了这个问题,但我无法使用CMake添加这个参数。我试过:set(CMAKE_CXX_FLAGS"${CMAKE_CXX_FLAGS}`pkg-config--lib
我有一个用C++编写的项目,我正在使用cmake来构建它。该项目有许多子项目,其中一个是其他子项目所需的库。我可以编译.so并将其移动到构建目录添加_库,和安装(目标...)但是我还需要将lib的头文件安装在构建目录的include目录下。我使用install(FILES...)来完成它,但它似乎根本没有做任何事情。为了演示它,我通过qtcreator创建了一个测试项目,&lstestCMakeLists.txtempty.hhmain.cpp$cattest/CMakeLists.txtproject(test)cmake_minimum_required(VERSION2.8)in
我正在开始一个新项目,需要选择一个构建系统。我讨厌必须手动将每个C++源文件添加到我的构建规则中,因为这种事情应该在2016年之前实现自动化,并且在重构时会导致额外的繁忙工作(重命名头文件中的类、源文件和构建系统文件...)。当我看到这篇文章时,我开始使用CMake递归文件通配:SpecifysourcefilesgloballywithGLOB?这表明globbing是邪恶的,因为CMake使用两个阶段进行构建(cmake和make),而在正常使用中用户只重新运行第二阶段(make)。乍一看,Bazel还允许文件通配。与Bazel一起使用是邪恶的吗?在代码库上运行find这样的扩展问
我知道Strategy和AbstractFactory设计模式-但是它们不能解决我当前的问题:我正在创建一个提供非常基本的GUI的C++库。但是我希望用户能够在编译时选择使用哪个GUI库(比如Qt或FLTK)来实际呈现GUI。然而,用户应该只需要了解我的库中的方法。使用Qt后端或FLTK后端应该可以在不进行任何更改的情况下编译相同的代码。我想到了这样的事情:classA{//dothingsthatarenotspecifictoQTorFLTKhereastherearemany//methodsIwillneedindependentofthebackend}classQT_A:p
我最近向CMake项目添加了一个模块,该项目依赖于我仅针对发布CRT编译的库。在CMakeLists.txt中看起来像这样:IF(WIN32)ADD_LIBRARY(mymoduleMODULE${MY_LIBRARY_FILES})TARGET_LINK_LIBRARIES(mymodulelibVendor)INSTALL(TARGETSmymoduleLIBRARY)ENDIF(WIN32)如果我尝试使用调试设置在MSVC中编译此模块,编译将失败。所以我想做的是将它排除在调试配置中的编译和安装之外。在发布配置中,它将照常使用。可以用CMake做到这一点吗?
我一定是犯了一些明显的错误,但经过几个小时的斗争,我无法取得进一步的进展:在升级到Boost1.54、CMake2.8.12和Python2.7.5(这三个都来自略微较早的次要版本)之后,我的project的Python绑定(bind)不再在调试配置中链接(它们在发布中链接良好)。我正在使用VS2012构建。更新前一切正常。我以标准方式构建了Boost:bootstrap.bat后跟b2address-model=64toolset=msvc-11.0。我的系统安装了Python2.7,它由b2获取:notice:[python-cfg]Configuringpython...noti
我正在使用CMake和MinGW32在C++中做一个小项目,这需要libcurl库,但是当我尝试静态链接构建libcurl.a时,我得到undefinedreference错误undefinedreferenceto`_imp__curl_easy_init'undefinedreferenceto`_imp__curl_easy_setopt'undefinedreferenceto`_imp__curl_easy_perform'undefinedreferenceto`_imp__curl_easy_getinfo'undefinedreferenceto`_imp__curl_
我正在尝试使用CMake制作可执行文件。此可执行文件需要位于项目中的文件的完整路径。intmain(){std::ifstream("fullpath_to_file");//....}我认为如果CMake可以用用户指定的字符串替换源代码中的某些符号,就不需要硬编码完整路径了。例如,如果CMake可以将源代码(cpp)中的${CMAKE_PROJECT_DIR}替换为${PROJECT_SOURCE_DIR}之类的cmake变量,那么我就可以这样编写源代码。intmain(){std::ifstream("${CMAKE_PROJECT_DIR}/input/my_input.txt"
我们想用CMAKE系统构建一个共享库。它是这样的:lib/CMakeLists.txtsrc/CMakeLists.txtmodule/CMakeLists.txtmodule1.cfoo.cmodule1.c需要一些标准共享库,如librt。我们有add_library(modulemodule1.c)target_link_libraries(modulert)在module/子目录中。但仍然会收到来自librt的未知错误。 最佳答案 如果librt与-lrt链接,那么在CMake中您可以这样链接它:target_link_li
有什么方法可以自动创建FindXXX.cmake,其中XXX是我的Cmake项目?我看到他们手动创建FindXXX.cmake的许多项目,但我相信可以自动创建它。而且,我应该在Linux上的什么位置安装我的项目?谢谢! 最佳答案 看看CMake'sprojectconfigfile机制(连同CMakePackageConfigHelper模块;您可能还想看看thiswikipage)。查找脚本对于查找CMake本身不了解的依赖项最有用。另一方面,如果依赖项也是使用CMake构建的,您可以让CMake自动为您生成一个项目配置文件,作为