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 路径指令的主要内容,如果未能解决你的问题,请参考以下文章