初学cmake编译时遇到的问题

1.函数中定义的变量名不能一样

2.在源文件中定义头文件类中的函数时,需要加上类名和叹号

3.头文件中声明的函数忘记在源文件中定义

4.在头文件中类外声明的函数,并要求在类中使用,可以把定义和声明写在命名空间外面

5.无参构造函数如果在头文件中定义了,就一定要在头文件或源文件中声明,不能忘记{}

6.遇见了如sem_init未定义的错误,需要在ADD_EXECUTABLE后面加上set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread"

### CMake 编译流程对比 Visual Studio 编译流程 #### CMake 编译流程的特点 CMake 是一种跨平台的构建系统生成器,允许开发者通过相同的配置文件在不同的操作系统上创建本地化的构建环境。对于基于 CMake 的项目,在项目的根目录下编写 `CMakeLists.txt` 文件定义如何构建项目之后,可以通过运行 `cmake .` 来生成适合当前系统的 Makefile 或者其他类型的项目文件[^1]。 为了生成不同版本的应用程序(如 Debug 和 Release),只需修改 CMake 配置中的参数即可轻松切换编译模式: ```cmake set(CMAKE_BUILD_TYPE "Debug") # or "Release" ``` 接着执行相应的编译指令,比如使用 `make` 进行实际编译过程[^3]。 #### Visual Studio 编译流程的特点 相比之下,Visual Studio 使用的是集成开发环境中内置的一套完整的解决方案管理器和编译工具链。它提供了图形化界面让用户能够方便地设置工程属性、选择编译选项以及启动调试会话等功能。当用户点击“Build Solution”按钮时,Visual Studio 将自动解析所有的依赖关系并调用 MSVC 编译器完成整个编译链接的过程[^5]。 #### 差异分析 - **灵活性 vs 易用性**: CMake 提供了更高的灵活性,因为它支持多种 IDE 及命令行下的自动化脚本;而 Visual Studio 则更注重用户体验上的简便性和直观的操作体验。 - **多平台兼容性**: CMake 几乎可以在任何主流平台上工作,并且可以为目标平台定制特定的行为;相反,Visual Studio 主要面向 Windows 平台及其衍生产品线。 - **学习曲线**: 对于初学者来说,掌握 CMake 所需的时间可能较长一些,因为这涉及到理解其语法结构及各种宏函数的作用;然而一旦熟悉后就能享受到高度自由度带来的便利。另一方面,由于 Visual Studio 拥有丰富的在线帮助资源和支持社区,因此更容易被新手接受。 - **性能表现**: 在某些情况下,直接利用原生IDE提供的优化可能会让后者稍占优势,尤其是在处理大型复杂工程项目的时候。不过随着现代计算机硬件的发展,两者间的差距正在逐渐缩小。 #### 代码示例展示两种方式的不同之处 以下是简单的 Hello World 程序分别采用这两种方式进行编写的例子: ##### 使用 CMake 构建 (适用于 Linux/macOS/Windows) ```cpp // main.cpp #include <iostream> int main() { std::cout << "Hello from CMake!" << std::endl; } ``` 对应的 `CMakeLists.txt` 如下所示: ```cmake project(HelloWorld) add_executable(main main.cpp) ``` ##### 使用 Visual Studio 新建控制台应用程序 (.NET Core Console App) 在 Visual Studio 中新建一个名为 HelloWorld 的项目,则自动生成如下源码: ```csharp using System; namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello from Visual Studio!"); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值