首页 > 其他分享 >cmake之find_library使用问题

cmake之find_library使用问题

时间:2024-03-23 22:11:45浏览次数:24  
标签:CMAKE 工程 demo library DEMO cmake find

附上工程源码

demo工程

PS:这个工程用于导出库

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(demo LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_library(demo SHARED
  demo.cpp
  demo.h
)

target_compile_definitions(demo PRIVATE DEMO_LIBRARY)

demo.h

#ifndef DEMO_H
#define DEMO_H

class Demo
{
public:
    Demo();

    void Print();
};

#endif // DEMO_H

demo.cpp

#include "demo.h"
#include <iostream>

Demo::Demo()
{
}

void Demo::Print()
{
    std::cout << "this is a demo" << std::endl;
}

find-library工程

PS:这个工程用于链接demo库

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(find-library LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)

find_library(LIB_DEMO demo ${CMAKE_CURRENT_SOURCE_DIR}/lib)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} ${LIB_DEMO})

main.cpp

#include <iostream>
#include "demo.h"

using namespace std;

int main()
{
    Demo d;
    d.Print();
    return 0;
}

问题情形

首先这两个工程在Linux下使用没有问题的,find-library工程编译正常,可以正确链接demo库;但是在Windows平台就死活不行了,find-library工程CMakeLists.txt第10行老是报错提示demo库找不到

LIB_DEMO
    linked by target "find-library" in directory E:/workspace/daily-project/cpp/find-library

但明明是把demo工程生成的库拷贝到find-library工程的lib目录下了,为啥就是死活会报错?Windows难道对库文件的格式有要求?于是尝试把demo工程的CMakeLists.txt第9行SHARED改成STATIC,重新编译demo,再把生成的静态库文件demo.lib拷贝到find-library工程的lib目录下,重新编译该工程却出乎意料的成功了!但参考官网find_library的用法却没有得到解析

总结

下次写跨平台编译的代码的时候记得在cmake上面配置生成不同类型的库

标签:CMAKE,工程,demo,library,DEMO,cmake,find
From: https://www.cnblogs.com/hywing/p/18091775

相关文章

  • Error: Could not find or load main class org.apache.hadoop.hbase.util.GetJavaPro
    Hbase没有将其自身的依赖包添加到classpath配置路径所以才会导致找不到自身主类的报错vim/usr/local/hbase/bin/hbase 在161行出修改CLASSPATH="${HBASE_CONF_DIR}"CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar:/usr/local/hbase/lib/*修改成功后,不再报错......
  • elFinder的目录映射
     目录映射一级文件夹创建符号连接;选择源链接点在elFinder相应文件夹的空白处右击,选择「创建为」→「符号连接」修改php\\connector.minimal.php文件,新增一个项目卷。大约是在165行之后。修改'path’一行中的路径修改'URL'一行中的路径(与path中的保持一致)//......
  • QMake和CMake
     区别和相同点       qmake和cmake两者都用来构建系统,都生成一个Makefile,该文件由make读取以构建项目,告诉编译器和链接器该做什么,以创建可执行文件(或动态或静态库)。       qmake专注于使用Qt的项目,QtCreator可以轻松生成项目文件(适合初学者),并由QtCreator支......
  • 常用命令find 细则
    常用命令find细则前言find命令在Linux和Unix系统中被广泛使用,用于在目录树中查找文件,并可以对查找到的文件执行指定的操作。以下是find命令的一些常用选项和用法总结:常用选项1.-name:按照文件名查找文件。2.-iname:按照文件名查找文件,不区分大小写。3.-type:......
  • find symbolic links
    -P永远不要跟随符号链接。这是默认行为。当find检查或打印有关文件的信息时,如果该文件是符号链接,则所使用的信息应从符号链接本身的属性中获取。 -L遵循符号链接。当find检查或打印有关文件的信息时,所使用的信息应取自链接指向的文件的属性,而不是链接本身(除非它是一个断开的......
  • nvm 下载新的Node(V18.19.0)版本,查看npm的版本出现异常Error: Cannot find module '@npm
    异常: 之前下载18.17.1查看npm也有问题ERROR:npmv9.6.7isknownnottorunonNode.jsv18.17.1. 大概意思是npm的版本是 v9.6.7单不能运行在v18.17.1的node上,但是node官网显示v18.17.1版本的node是适配v9.6.7的npm。这就很矛盾 最后找到的解决方案是升级nvm的版本......
  • Codeforces Round 923 (Div. 3) D. Find the Different Ones!
    写点简单的思维题https://codeforces.com/problemset/problem/1927/D思路:用两个数组,一个存储原始数据,一个用nex存该位置第一次不一样的下标#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<sstream>#include<string>#include<str......
  • CMakeLists.txt基本语法及使用
    1、cmake的说明cmake是一种高级编译配置工具当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候便需要用到cmake。CMakeList.txt中指令不区分大小写。CMakeList.txt中的参数和变量是区分大小写,名称只能用字母,数字,下划线,破折号。......
  • Linux Java调用 海康sdk报 Unable to load library '/home/slife/bsmt/HCNetSDK_linux
    1、问题在Linux下java调研libPlayCtrl.so文件失败 解决方案:sudovim~/.bashrc 在该文件末尾追加:exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/slife/bsmt/HCNetSDK_linux64/刷新一下source~/.bashrcok参考链接 https://www.cnblogs.com/kikyoqiang/p/14911373.......
  • find /path/to/search -type d -perm -o=x ! -perm -o=rw
    find/path/to/search-typed-perm-o=x!-perm-o=rwfind/-typed-perm-o=x!-perm/o=rw-execsh-c'find"$1"-typef-perm/o=r'sh{}\; find/-typed!-path'/data/data*'-perm-o=x!-perm/o=rw可以find/-typ......