0

例如,我有 2 个独立的(!它们应该是独立的!)构建任务。

第一个任务构建库。

第二个任务构建二进制文件,应该使用第一个任务中的库。我不需要任何类型的安装库,而是只需要使用由第一个任务构建的构建树中的库。

因此,在库的 cmake 脚本中,我添加了以下字符串:

...
export(TARGETS ${PROJECT_NAME} FILE MyLibConfig.cmake)
...

然后我认为在二进制 cmake 脚本中我应该以某种方式导入并另外将路径传递给库 MyLibConfig.cmake 作为命令行参数

有很多关于导出的信息,但没有人知道如何进行导入。

smbody能解释一下吗?

PS:但请用自己的话解释,不要只提供链接 - 我读了很多,但都不清楚并且不起作用:(

UPD3:好的,让我们试着做一些简单的例子。

该库由 3 个文件组成

// MyLib.h
#pragma once

int MyFunc();

//------------------------------------
// MyLib.cpp
#include "MyLib.h"

int MyFunc()
{
    return 5;
}

和 cmake 文件

cmake_minimum_required (VERSION 3.17)
project (MyLib)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")   # binaries
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")   # static lib
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")   # shared lib

add_library(${PROJECT_NAME} MyLib.cpp)

target_include_directories(${PROJECT_NAME}
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
)

export(TARGETS ${PROJECT_NAME} FILE MyLibConfig.cmake)

二进制项目由 2 个文件组成

cmake_minimum_required (VERSION 3.17)
project (MyBin)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")   # binaries
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")   # static lib
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")   # shared lib

add_executable(${PROJECT_NAME} Main.cpp)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(MyLib REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC MyLib)

和 .cpp 文件

//Main.cpp
#include <iostream>
#include <MyLib.h>

int main()
{
    int k = MyFunc();
    ++k;
    
    return 0;
}

我使用 MyLib_DIR 变量路径启动 cmake 进行二进制构建以生成 MyLibConfig.cmake

CMake 完成工作没有任何错误,但我收到编译错误

Main.cpp(2): fatal error C1083: Cannot open include file: 'MyLib.h': No such file or directory

我应该如何解决?

4

0 回答 0