我是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
答案 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)