我不太擅长CMake,所以我试图创建一个我想要实现的极简示例。
我想写一个库,它与我的主项目一起编译,然后动态链接到我的项目可执行文件。
这是我的测试项目文件系统:
x1c 0d1x的数据
CMakeLists.txt:
cmake_minimum_required(VERSION 3.13)
project(TestProject)
add_subdirectory(lib_wrapper)
add_executable(TestExe main.cpp)
target_link_libraries(TestExe libwrapper)
target_include_directories(TestExe PUBLIC ../lib_wrapper)
target_include_directories(TestExe PUBLIC ../src)
字符串
lib_wrapper/CMakeLists.txt:
add_library (wrapper wrapper.cpp)
target_include_directories (wrapper PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
型
src/main.cpp:
#include <src/a_header.h>
int main()
{
int j = 0;
return 0;
}
型
src/a_header.h:
#pragma once
#include <lib_wrapper/wrapper.h>
#include <iostream>
inline void some_func()
{
std::cout << "some_func()" << std::endl;
// Call a function from lib_wrapper/wrapper.h
}
型cmake ..
成功地为主项目生成。但是,当我在文件夹Test
中make
时,我得到:
Test/main.cpp:3:10: fatal error: src/a_header.h: No such file or directory
3 | #include <src/a_header.h>
型
有人能帮帮忙吗?欢迎任何改进的建议。
1条答案
按热度按时间ujv3wf0j1#
在构建
TestExe
目标时,根文件夹Test
不在包含目录列表中。一种方法是将
${CMAKE_SOURCE_DIR}
添加到target_include_directories(TestExe PUBLIC ...
行的末尾,在)之前,或者您可能希望将其替换为:字符串
我将
PUBLIC
更改为PRIVATE
,因为通常可执行目标不会被其他目标继承,因此不需要与其他目标共享包含目录。你的第二个错误是@Tsyvarev在评论中提到的:
型
这应该是
型
因为您库目标名称是wrapper:
型