欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

cmake (2)路径指令

发布时间:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 cmake (2)路径指令 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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/mainlinux-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 (2)路径指令的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。