cmake 路径指令

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake 路径指令相关的知识,希望对你有一定的参考价值。

1. INCLUDE_DIRECTORIES引入头文件搜索路径

INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)

这条指令可以用来向工程添加多个特定的头文件搜索路径,路径之间用空格分割,如果路径
中包含了空格,可以使用双引号将它括起来,默认的行为是追加到当前的头文件搜索路径的
后面,你可以通过两种方式来进行控制搜索路径添加的方式

  • CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过 SET 这个 cmake 变量为 on,可以
    将添加的头文件搜索路径放在已有路径的前面。

  • 通过 AFTER 或者 BEFORE 参数,也可以控制是追加还是置前
    eg.

 INCLUDE_DIRECTORIES(/usr/include/hello)

2. LINK_DIRECTORIES(directory1 directory2 …)

这个指令非常简单,添加非标准的共享库搜索路径。

eg. 在工程内部同时存在共享库和可执行二进制,在编译时就需要指定一下这些共享库的路径。

TARGET_LINK_LIBRARIES 的全部语法是:
TARGET_LINK_LIBRARIES(target library1 <debug | optimized> library2 …)
这个指令可以用来为 target 添加需要链接的共享库,本例中是一个可执行文件,但是同样
可以用于为自己编写的共享库添加共享库链接

eg.
TARGET_LINK_LIBRARIES(main libhello.so)
这里的 hello 指的是我们上一节构建的共享库 libhello

ldd src/main

linux-gate.so.1 => (0xb7ee7000)
libhello.so.1 => /usr/lib/libhello.so.1 (0xb7ece000)
libc.so.6 => /lib/libc.so.6 (0xb7d77000)
/lib/ld-linux.so.2 (0xb7ee8000)

可以清楚的看到 main 确实链接了共享库 libhello,而且链接的是动态库libhello.so.1

将 TARGET_LINK_LIBRRARIES 指令修改为:
TARGET_LINK_LIBRARIES(main libhello.a)

重新构建后再来看一下 main 的链接情况

ldd src/main
linux-gate.so.1 => (0xb7fa8000)
libc.so.6 => /lib/libc.so.6 (0xb7e3a000)
/lib/ld-linux.so.2 (0xb7fa9000)

以上是关于cmake 路径指令的主要内容,如果未能解决你的问题,请参考以下文章

cmake install() 行为?如果给出此指令,为啥二进制会在 PWD 中查找

没装gcc能用cmake吗?

CMake--常用指令

cmake 各种语法的作用

vscode 配置task.json,执行多条指令

这些角度电子邮件指令代码片段如何连接