草庐IT

vs-cmake-examples

全部标签

c++ - 在 CMake 中强制使用 C99(使用 'for' 循环初始声明)

我一直在寻找一种可移植的方式来强制CMake启用编译器的C99功能,以避免例如以下gcc错误:error:‘for’loopinitialdeclarationsareonlyallowedinC99modefor(ints=1;sStepNumber;s++){^我也不想检查哪个编译器并附加如下内容:set(CMAKE_C_FLAGS"-std=c99")#thatwouldbebad所以我找到了这篇文章:EnablingC99inCMake以及相关的功能请求:0012300:CMakehasnocross-platformwaytoaskforC99.在这个Mantis错误中,我了

c++ - 在 CMake 中强制使用 C99(使用 'for' 循环初始声明)

我一直在寻找一种可移植的方式来强制CMake启用编译器的C99功能,以避免例如以下gcc错误:error:‘for’loopinitialdeclarationsareonlyallowedinC99modefor(ints=1;sStepNumber;s++){^我也不想检查哪个编译器并附加如下内容:set(CMAKE_C_FLAGS"-std=c99")#thatwouldbebad所以我找到了这篇文章:EnablingC99inCMake以及相关的功能请求:0012300:CMakehasnocross-platformwaytoaskforC99.在这个Mantis错误中,我了

c++ - 如何在 Windows 上使用 CMake + CPack + NSIS 创建安装程序?

我想为我正在构建的基于C++的系统创建一个跨平台安装程序。我使用CMake来构建一切,如果我可以使用CPack来制作安装程序,那就太好了。我已经让CPack在OSX上运行,但我无法让它在Windows上运行。为了方便起见,我尝试在http://www.cmake.org/Wiki/CMake:Packaging_With_CPack获取示例使用NSIS安装程序软件。配置后我在任何地方都找不到NSIS安装程序(使用VS2010Win64生成器)。也许我很困惑,但我认为可以仅使用源代码、CMake、CPack和NSIS创建安装包,而无需VisualStudio。这可能吗?完整教程的链接(h

c++ - 如何在 Windows 上使用 CMake + CPack + NSIS 创建安装程序?

我想为我正在构建的基于C++的系统创建一个跨平台安装程序。我使用CMake来构建一切,如果我可以使用CPack来制作安装程序,那就太好了。我已经让CPack在OSX上运行,但我无法让它在Windows上运行。为了方便起见,我尝试在http://www.cmake.org/Wiki/CMake:Packaging_With_CPack获取示例使用NSIS安装程序软件。配置后我在任何地方都找不到NSIS安装程序(使用VS2010Win64生成器)。也许我很困惑,但我认为可以仅使用源代码、CMake、CPack和NSIS创建安装包,而无需VisualStudio。这可能吗?完整教程的链接(h

c++ - static const std::map<string, int> vs if-elseif

我编写了一个将字符串转换为数字的函数。我看到了两种可能的写法:intconvert(conststd::stringinput){if(input=="one"){return1;}elseif(input=="two"){return2;}//etc.return0;}或者intconvert(conststd::stringinput){staticconstmaptable={{"one",1},{"two",2}//etc.}constautoresult=table.find(input);if(result==table.end()){return0;}returnresu

c++ - static const std::map<string, int> vs if-elseif

我编写了一个将字符串转换为数字的函数。我看到了两种可能的写法:intconvert(conststd::stringinput){if(input=="one"){return1;}elseif(input=="two"){return2;}//etc.return0;}或者intconvert(conststd::stringinput){staticconstmaptable={{"one",1},{"two",2}//etc.}constautoresult=table.find(input);if(result==table.end()){return0;}returnresu

c++ - C vs C++ switch 语句变量定义 vs 声明

我在玩一些语法,发现了一些奇怪的编译器规则,想知道这是什么原因C不会编译,但C++会:switch(argc){case0:intfoo;break;default:break;}C和C++都会编译这个:switch(argc){case0:;intfoo;break;default:break;}C会编译这个,但不会编译C++:switch(argc){case0:;intfoo=0;break;default:break;}gcc-v是gcc版本4.9.3(MacPortsgcc494.9.3_0)如果重要的话。我意识到解决方案是将case0:的内容用大括号括起来,但我对编译错误的

c++ - C vs C++ switch 语句变量定义 vs 声明

我在玩一些语法,发现了一些奇怪的编译器规则,想知道这是什么原因C不会编译,但C++会:switch(argc){case0:intfoo;break;default:break;}C和C++都会编译这个:switch(argc){case0:;intfoo;break;default:break;}C会编译这个,但不会编译C++:switch(argc){case0:;intfoo=0;break;default:break;}gcc-v是gcc版本4.9.3(MacPortsgcc494.9.3_0)如果重要的话。我意识到解决方案是将case0:的内容用大括号括起来,但我对编译错误的

c++ - 如何让 CMake 创建一个 dll 及其匹配的 lib 文件?

我正在使用CMake通过VisualStudio2010创建一个共享库。该解决方案输出一个dll文件,但不是一个匹配的lib文件。如何告诉CMake生成lib文件,以便我可以将其他项目链接到dll? 最佳答案 首先检查您的共享库中是否至少有一个导出符号。如果dll不导出符号,VisualStudio不会生成.lib文件。接下来,检查您的cmake文件-可能您已设置共享库目标的CMAKE_ARCHIVE_OUTPUT_DIRECTORY变量或ARCHIVE_OUTPUT_DIRECTORY属性。如果设置了这些变量/属性,那么Visua

c++ - 如何让 CMake 创建一个 dll 及其匹配的 lib 文件?

我正在使用CMake通过VisualStudio2010创建一个共享库。该解决方案输出一个dll文件,但不是一个匹配的lib文件。如何告诉CMake生成lib文件,以便我可以将其他项目链接到dll? 最佳答案 首先检查您的共享库中是否至少有一个导出符号。如果dll不导出符号,VisualStudio不会生成.lib文件。接下来,检查您的cmake文件-可能您已设置共享库目标的CMAKE_ARCHIVE_OUTPUT_DIRECTORY变量或ARCHIVE_OUTPUT_DIRECTORY属性。如果设置了这些变量/属性,那么Visua