Questions tagged «cmake»

CMake是一个跨平台的开源构建系统生成器。它生成用于构建系统的文件,例如用于多个集成开发环境的本机makefile,ninja-build和项目文件。

8
使用CMake生成Visual Studio C ++项目文件
我正在开发一个开源C ++项目,用于在Linux和Windows上编译的代码。我使用CMake在Linux上构建代码。为了简化开发设置和政治原因,我必须坚持Windows上的Visual Studio项目文件/编辑器(例如,我不能切换到Code :: Blocks)。我看到了使用CMake生成Visual Studio文件的说明,如此处所示。 您以前使用过CMake生成Visual Studio文件吗?您的经历如何?假设我要向项目添加一个新文件。这是什么工作流程?

8
如何在CMake中使用CCache?
我想执行以下操作:如果PATH中存在CCache,则使用“ ccache g ++”进行编译,否则使用g ++。我尝试编写一个小的my-cmake脚本,其中包含 CC="ccache gcc" CXX="ccache g++" cmake $* 但它似乎不起作用(运行make仍不使用ccache;我在CMAKE_VERBOSE_MAKEFILE上选中了它)。 更新: 按照此链接,我尝试将脚本更改为 cmake -D CMAKE_CXX_COMPILER="ccache" -D CMAKE_CXX_COMPILER_ARG1="g++" -D CMAKE_C_COMPILER="ccache" -D CMAKE_C_COMPILER_ARG1="gcc" $* 但是cmake可以避免抱怨使用编译器ccache失败(这是可以预期的)。
90 c++  unix  cmake  ccache 

10
CMake和CTest:make测试不会建立测试
我正在CMake中尝试CTest,以便使用来自动运行某些测试 make testtarget。问题在于CMake不能“理解”我愿意运行的测试,因为它是项目的一部分,因此必须进行构建。 因此,我正在寻找一种明确指定此依赖性的方法。

5
CMake中的功能与宏
CMake 2.8.12的官方文件中提到macro 调用宏时,首先通过用传递的参数替换形式参数($ {arg1})来修改宏中记录的命令,然后将其作为普通命令来调用。 和关于 function 调用它时,函数中记录的命令首先通过用传递的参数替换形式参数($ {arg1})进行修改,然后作为普通命令调用。 显然,两个引号几乎相同,但使我感到困惑。像宏一样调用函数时,首先要替换参数吗?
89 cmake 

10
CMake无法使用C ++确定链接器语言
我试图同时在Windows 7 x64和Visual Studio 2010和Cygwin上运行cmake hello world程序,但似乎都无法正常工作。我的目录结构如下: HelloWorld -- CMakeLists.txt -- src/ -- -- CMakeLists.txt -- -- main.cpp -- build/ 我先执行,cd build然后执行cmake ..,并收到一条错误消息,指出 CMake Error: CMake can not determine linker language for target:helloworld CMake Error: Cannot determine link language for target "helloworld". 但是,如果我将filsystem和src/CMakeLists.txt所有正常工作的main.cpp扩展名更改为main.c。从Visual Studio命令提示符(Visual Studio解决方案生成器)和Cygwin终端(Unix Makefiles生成器)运行都是这种情况。 知道为什么这段代码行不通吗? CMakeLists.txt PROJECT(HelloWorld C) …
89 c++  c  cmake 

4
使用CMake设置CFLAGS和CXXFLAGS选项
我只想调试一些在Linux上运行的代码,并且需要一个调试版本(-O0 -ggdb)。所以我将这些东西添加到我的CMakeLists.txt: set(CMAKE_BUILD_TYPE DEBUG) set(CMAKE_C_FLAGS "-O0 -ggdb") set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_C_FLAGS_RELEASE "-O0 -ggdb") set(CMAKE_CXX_FLAGS "-O0 -ggdb") set(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "-O0 -ggdb") 当我尝试编译时,我使用启用了详细功能,make VERBOSE=1 并且观察了输出,就像这样 ... /usr/bin/c++ -D_BSD_SOURCE **-O0 -ggdb** -Wnon-virtual-dtor -Wno-long-long -ansi -Wundef -Wcast-align -Wchar-subscripts -Wall -W -Wpointer-arith -Wformat-security -fno-exceptions -DQT_NO_EXCEPTIONS -fno-check-new -fno-common -Woverloaded-virtual -fno-threadsafe-statics -fvisibility=hidden -fvisibility-inlines-hidden **-g -O2** …
88 cmake  cflags 

12
Cmake找不到Boost
我正在尝试使用CMake配置项目,但是即使它们位于指定的文件夹中,它也无法找到Boost库。我已指定Boost_INCLUDE_DIR,Boost_LIBRARYDIR并且BOOST_ROOT,但是我仍然得到一个错误说CMake的是无法找到的推动作用。这种错误的原因可能是什么?
86 boost  cmake 


1
在CMake中设置通用编译标志的现代方法是什么?
CMake提供了多种机制来获取编译器的标志: CMAKE_<LANG>_FLAGS_<CONFIG> 变数 add_compile_options 命令 set_target_properties 命令 在现代使用中,有没有一种方法比另一种方法更可取?如果可以,为什么?另外,该方法如何与MSVC等多个配置系统一起使用?
84 cmake 


6
从`cmake`使用`pkg-config`的正确方法是什么?
在网上环顾四周,我看到了很多这样的代码: include(FindPkgConfig) pkg_search_module(SDL2 REQUIRED sdl2) target_include_directories(app SYSTEM PUBLIC ${SDL2_INCLUDE_DIRS} target_link_libraries(app ${SDL2_LIBRARIES}) 但是,这样做似乎是错误的方法,因为它仅使用include目录和库,但忽略了定义,库路径和可能由返回的其他标志pkg-config。 做到这一点并确保编译pkg-config器使用返回的所有编译和链接标志的正确方法是什么app?是否有单个命令来完成此操作,即类似target_use(app SDL2)? 参考: include() FindPkgConfig
81 cmake  pkg-config 

6
如何使用CMake检测编译器的C ++ 11支持
是否有一种方法可以让CMake自动检测是否编译器支持C ++ 11? 最好在CMake运行期间通知用户代码将不会编译,因为编译器不支持C ++ 11。目前,我设置了C ++ 11标志。但是,如果编译器不支持它,则用户会在CMake运行期间收到编译错误,而不是错误。 完美的东西就像find_package()。但是,我没有找到任何提供所需功能的模块或功能。 此外,最好具有检测编译器是否需要标志std=c++0x或的功能std=c++11。 是否有可用的东西,或者我需要自己开发? 下面是我到目前为止使用的一些代码,但是它仅适用于GNU'c GCC编译器。如果有一个更通用的解决方案,那将是很好的。 if(CMAKE_COMPILER_IS_GNUCXX) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) if (GCC_VERSION VERSION_GREATER 4.7 OR GCC_VERSION VERSION_EQUAL 4.7) message(STATUS "C++11 activated.") add_definitions("-std=gnu++11") elseif(GCC_VERSION VERSION_GREATER 4.3 OR GCC_VERSION VERSION_EQUAL 4.3) message(WARNING "C++0x activated. If you get any errors update to a compiler …
78 c++  c++11  cmake 



3
CMakeLists.txt中未使用CMAKE_BUILD_TYPE
我无法将默认的构建配置设置为Release。在我的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) 但是在构建我的项目并打开解决方案时,总是会看到Debug模式,这与我在CMakeLists文件中指定的相反。我究竟做错了什么? 我已经看过那里的其他一些问题,但是我没有看到专门针对此问题的任何内容。 CMakeLists.txt的要点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.