这里的文件存储方式如下:
其中build是构建目录,即构建的结果和中间产物都在该目录下
include是包含目录
src是子函数的目录或是依赖文件的目录
main.cpp主函数
从上图的右边可以发现src里存在add.cpp和一个对应的cmakelists.txt文件,同时根目录下也存在一个cmakelists.txt文件
上面的代码就是两个源文件的代码,很简单,主函数调用另个一文件的子函数add完成运算和输出,下面看看如何使用cmake进行构建
根目录下的CMakeLists.txt
上面的作用都进行了详细的解释,这里需要强调的是几个命令:
set指令的语法是:
set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
现阶段,你只需要了解SET指令可以用来显式的定义变量即可。
比如我们用到的是SET(SRC_LIST main.c),如果有多个源文件,也可以定义成:
set(SRC_LIST main.c t1.c t2.c)。
message指令的语法是:
message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"...)
这个指令用于向终端输出用户定义的信息,包含了三种类型:
SEND_ERROR,产生错误,生成过程被跳过。
SATUS — ,输出前缀为 的信息。
FATAL_ERROR,立即终止所有cmake 过程.
我们在这里使用的是STATUS 信息输出,演示了由PROJECT 指令定义的两个隐式变量
HELLO_BINARY_DIR和HELLO_SOURCE_DIR。
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存
放的位置。EXCLUDE_FROM_ALL参数的含义是将这个目录从编译过程中排除,比如,工程
的example,可能就需要工程构建完成后,再进入 example目录单独进行构建(当然,你
也可以通过定义依赖来解决此类问题)。
上面的例子定义了将src子目录加入工程,并指定编译输出(包含编译中间结果)路径为
bin目录。如果不进行 bin目录的指定,那么编译结果(包括中间结果)都将存放在
build/src 目录(这个目录跟原有的src目录对应),指定 bin 目录后,相当于在编译时
将src重命名为bin,所有的中间结果和目标二进制都将存放在bin目录。
src目录下的CMakeLists.txt
最后编译结果为:
进入build目录在linux目录行键入:cmake .. 然后make
构建后,在build中会创建bin目录和lib目录还有对应的src,观察后会发现,src是中间产物,最终的可执行文件在bin文件夹下,src生成的库文件在lib文件夹下,大家多尝试修改,就明白了。
到此这篇cmake多级目录(cmake生成多个可执行文件)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/56256.html