从不同目录链接外部库

时间:2019-12-17 13:58:27

标签: c cmake

我是CMake的新手,希望有人能帮助我。

我正在尝试从其他文件夹链接库。该库是一个git repo,我的项目也是如此(我两个都拥有)。这是基本的文件夹结构:

Library1/
  build/
  CMakeLists.txt
  library1.h
  library1.c
Project1/
  build/
  CMakeLists.txt
  main.c

Library1/CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(Library1 VERSION 0.1)
file(GLOB Sources *.h *.c)
add_library(library1 SHARED ${Sources})
target_include_directories(library1
    INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
    )

Project1/CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(Project1 VERSION 1.0)
add_library(library1 SHARED IMPORTED GLOBAL)
set_target_properties(library1 PROPERTIES IMPORTED_LOCATION "../Library1/build/Debug/library1.dll")
add_executable(Project1 main.c)
target_link_libraries(Project1 PUBLIC library1)

main.c

#include <stdio.h>
#include "library1.h"

int main() {
    printf("Hello");
    return 0;
}

Library1开始运行

cd build
cmake ..
cmake --build .

产生build/Debug/library1.dll

Project1中,运行相同的命令会产生以下错误:

main.c(2,10): fatal error C1083: Cannot open include file:  
'library1.h': No such file or directory [...]

我不确定如何正确设置CMakeLists.txt文件以导入我的库。我可能只是想念一条线,但我不太确定。任何帮助,将不胜感激!另外,我不想将.dll路径硬编码到文件中。

我正在使用Windows的CMake,v3.16.1

2 个答案:

答案 0 :(得分:1)

第二个makefile将添加库,但不添加要用于编译的头文件(接口)的路径。

include_directories(../Library1)添加到第二个生成文件

答案 1 :(得分:1)

您的Project1可执行文件不知道如何找到library1的头文件。您可以通过修改Project1文件以包括一个target_include_directories()调用来为Project1/CMakeLists.txt添加一个include目录:

target_include_directories(Project1 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../Library1)