make的link_directories命令不起作用

按照《CMake Practice》中第六章的设置,采用include_directories命令去寻找共享库的路径,src/CMakeLists.txt如下:

ADD_EXECUTABLE(main main.c)
INCLUDE_DIRECTORIES(/tmp/include/hello)
LINK_DIRECTORIES(/tmp/lib/)
TARGET_LINK_LIBRARIES(main libhello.a)

执行cmake及make后,仍然有link error。

cmake的官网对include_directories的说明如下:

*Specify directories in which the linker will look for libraries.

link_directories(directory1 directory2 …)

Note that this command is rarely necessary. Library locations returned by find_package() and find_library() are absolute paths. Pass these absolute library file paths directly to the target_link_libraries() command. CMake will ensure the linker finds them.*

官网不推荐使用link_directoris,而是推荐使用find_package和find_library寻找共享库的绝对路径,再传给target_link_libraries使用。

按照这里的例子,改写了src/CMakeLists.txt如下:

ADD_EXECUTABLE(main main.c)
INCLUDE_DIRECTORIES(/tmp/include/hello)

find_library(LIBHELLO_PATH hello /tmp/lib)
IF(NOT LIBHELLO_PATH)
MESSAGE(FATAL_ERROR "libhello not found")
ENDIF(NOT LIBHELLO_PATH) 

MESSAGE(STATUS ${LIBHELLO_PATH} " found")
TARGET_LINK_LIBRARIES(main ${LIBHELLO_PATH})

这下可以编译通过了。

时间: 2024-08-22 02:39:22

make的link_directories命令不起作用的相关文章

联机命令解释程序的作用与工作流程

  命令解释程序的主要功能是对用户输入的命令进行解释,然后转入相应命令的处理程序去执行.操作系统一般都把命令解释程序放在OS的最高层,以实现与用户的直接交互. 1.命令解释程序的作用 键盘终端处理程序接收用户从键盘输入的命令,并将其保存在键盘缓冲区中.接下来由命令解释程序读入该命令,并进行识別,再转到相应命令处理程序的入口地址,把控制权交给该处理程序去执行,然后将处理结果送屏幕显示.若用户输入命令后,命令解释程序未能予以识別,或在执行中间出现问题时,则应显示出某一出错信息. 2.命令解释程序的组

Fdisk /MBR命令有什么作用?

  fdisk /mbr 命令适用于: 1. 主引导程序受损 此乃常见故障, 硬盘不能自检, 微机死锁, 或显示 boot failure-insert system diskette, --之类; 经由软盘引导, fdisk 命令能列出分区信息. 取硬盘同版本 dos 软盘或应急盘引导, 运行 a>fdisk /mbr 命令,仅向主引导扇区写入当前系统固有的主引导程序, 硬盘即恢复自举能力, 如果 dos 引导信息及系统文件等均正常. 2. 清除嵌入式主引导型病毒 此类病毒常见, 它们仅以先导

finger、who、w、users 命令作用及格式

  一.finger指令 1.作用:显示系统中用户信息 2.格式:finger [option] user 常用选项 -l 多行显示(login name,real name,有没有邮件,登录时间等信息) -s 单行显示(login name,real name等) -m [user] 只显示一个用户的信息 二.w指令 1.作用:显示当前登录到该台的所有在线用户,以及他们在干什么 2.格式:w [option] [user] 常用选项 -h skip header -l long listing

Linux vi下常用实用命令

查看文件编码: :set fileencoding 文件添加行号: :set number 查找某个运行的程序: ps -ef|grep 杀死某个进程: klii -9 进程号 在Linux中显示文件大小的时候,通常的做法是使用"ls -l",显示的大小是文件的字节大小. 但是,如果文件比较大的话,显示起来不是特别易读,这个时候,可以使用"ls -lh",就可以使用比较接近文件大小的单位显示文件的大小,如下: umask权限掩码 umask是chmod配套的,总共为

linux的top命令用法

top命令: top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况:但是top是个动态显示过程,即能够通过用户按键来不断刷新当前状态.如? 前台执行该命令,他将独占前台,直到用户终止该程式为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监控.他将显示系统中CPU最"敏感"的任务列表.该命令能够按CPU使用.内存使用和执行时间对任务进行排序:而且该命令的很多特性都能够通过交互式命令或在个人定制文档中进行设定.在后面的介绍中将把命令参数和交互命令分开讲述. 下

Linux 记录会话过程的命令

  在Unix系统维护中,有时候系统工程师希望能够记录下会话的过程.如在测试一个系统功能的时候,工程师就希望将测试的步骤都一一的纪录下来.以便出现问题时利用这份资料进行追踪分析.如有时候在制作培训文档的时候,可能也需要这些会话记录,以方便培训师制作PPT等培训文档.总之就是一句话,系统工程师现在想要记录某个会话的过程,在Unix系统中能否实现? 一.script命令的主要作用于特点. 在Windows操作系统中,读者可能用过一些屏幕记录软件,可以将某段时间的操作通过视频的形式记录下来.不过在Un

ftp的dir或ls命令无法查看文件列表怎么办

  网友们可能在使用ftp的dir或ls命令时查看文件列表,但是却无法看到,受到了限制,那么无法查看文件列表这就造成了我们许多的麻烦,那么要怎么的解决这个问题呢!现在我们一起来看看吧! 在Win7系统的命令行模式下,使用ftp的dir或ls命令无法查看文件列表,但是使用IE却可以查看.查找相关资料后,大致归结为两种原因: 权限有问题 windows自带防火墙拦截 实验后发现我的情况属于第二种,具体解决方法有以下几种: 直接关闭Windows防火墙 打开防火墙,但是设置入站规则允许ftp.exe程

巧用Dos命令轻松灭除U盘病毒

  1.点击"开始→运行",输入"CMD",按回车键 2.打开命令提示符窗口,切换到U盘所在盘符或是中了Autorun.inf病毒的盘符下,依次执行下面两条命令就可以了: attrib -S -H -R autorun.inf del autorun.inf 3.结束完成. 通过上述简单的两个小步骤的操作之后,你是不是见识到了DOS命令的强大作用,只要简单的两个小命令,就可以轻松地灭除了U盘病毒,是不是很神奇呢?这里小编需要提醒大家的是DOS命令执行后就很难恢复了,

Linux系统各种重启命令

在进行Linux系统操作的时候,如果出现更换硬件.更改系统配置及死机等情况时,就需要对电脑进行重启,而不同的情形重启的方式也不同,即使用的命令不同,下面小编就给大家介绍下Linux下不同情形的重启方法. 不同于桌面系统,作为服务器,我们较少对Linux系统进行系统重启,但在以下情形出现时,我们会对机器进行重启: 更换硬件 更改系统配置 系统僵死,需要重启恢复 关闭和重启系统方式 引导系统本质上只能用一种方法,与此不同的是,关闭或重新引导系统有多种方法: 关闭电源(下电) 使用shutdown命令