例如,我有 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
我应该如何解决?