|
楼主 |
发表于 2009-3-8 09:34:28
|
显示全部楼层
1.3 你好,世界
CMake是一种可扩展的脚本语言,要学会阅读和编写CMake脚本代码,就必须要理解它的基本词法和语法,以及理解它的接口扩充法则。而这一切的学习又都是建立在实践的基础上的,否则再好的教程课本和参考文档都只是废纸一张。
那么,是先罗列枯燥的关键字好呢?还是先打开任意的文本编辑器,小试牛刀一把好呢?笔者窃以为后者是通往CMake入门者殿堂的更快途径。
那么就让我们在不了解任何CMake脚本规范条目的前提下,开始CMake工程涉及的旅程吧。是不是有点疯狂呢?没关系,我们就用开发者最喜欢的“你好,世界”(Hello World)作为第一个实践的项目。编码过程中所涉及的各种词法和语法规则,我们仅仅稍作解释,只求给读者留下CMake脚本开发的初步印象,以便在阅读下一小节时能够更加得心应手。
现在我们假设有这样一个工程,它包括一个名为HelloLib的动态链接库,以及一个依赖于这个库的Test可执行程序。其文件夹结构为:
HelloLib子工程定义并实现了一个名为Hello的类,这个类只有一个公有方法sayHello(),作用是在屏幕上打印“Hello CMake”这一行简单的字符。为此,这个目录下将包含头文件Hello以及源文件Hello.cpp,并期望能够生成HelloLib.dll的动态链接库,以便所有依赖于HelloLib的程序可以因此打印出友好的欢迎语句。(尽管这看起来很幼稚 ^_^)
Test子工程只有一个源文件test.cpp,它的工作仅仅是在main函数中调用sayHello()方法并即刻结束自己的使命。Test因而要依赖于HelloLib库存在,并期望生成一个名为Test.exe的可执行文件,在控制台窗口中执行自己的简单任务。
这三个文件的源代码如下:- /* Hello */
- #ifndef H_HELLOWORLD
- #define H_HELLOWORLD
- #if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__)
- # ifdef HELLOWORLD_LIBRARY
- # define HELLOWORLD_EXPORT __declspec(dllexport)
- # else
- # define HELLOWORLD_EXPORT __declspec(dllimport)
- # endif
- #else
- # define HELLOWORLD_EXPORT
- #endif
- class HELLOWORLD_EXPORT Hello
- {
- public:
- void sayHello();
- };
- #endif
复制代码- /* Hello.cpp */
- #include <iostream>
- #include "Hello"
- void Hello::sayHello()
- {
- std::cout << "Hello CMake!" << std::endl;
- }
复制代码- /* test.cpp */
- #include <Hello>
- int main( int argc, char** argv )
- {
- Hello obj;
- obj.sayHello();
- return 0;
- }
复制代码 |
|