我无法让我的cmake项目运行。它应该构建一个库(Core),然后将此库添加到新的共享库中。问题是生成的库似乎没有正确链接可执行文件。
fatal error: JNF_NEAT/body.h: No such file or directory
我有一个CMake项目,其结构如下:
root
-> CMakeLists.txt
-> Core/
-> CMakeLists.txt
-> Sources/
-> Examples/
-> CMakeLists.txt
-> Example1/
-> CMakeLists.txt
-> Sources/
根/的CMakeLists.txt
cmake_minimum_required(VERSION 3.2.2)
project(JNF_NEAT)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/out/examples)
add_subdirectory(Core)
add_library(JNF_NEAT SHARED $<TARGET_OBJECTS:Core>)
target_link_libraries(JNF_NEAT -lstdc++fs)
add_subdirectory(Examples)
根/核心/的CMakeLists.txt
file(GLOB SOURCES Sources/*.cpp Sources/*.h)
add_library(Core OBJECT ${SOURCES})
根/实施例/的CMakeLists.txt
add_subdirectory(XOR)
根/实施例/ XOR /的CMakeLists.txt
include_directories(../../out/lib)
file(GLOB SOURCES Sources/*.cpp Sources/*.h)
add_executable(XOR_EXAMPLE ${SOURCES})
target_link_libraries(XOR_EXAMPLE JNF_NEAT)
整个源代码可用here。
我尝试在target_include_directories(XOR_EXAMPLE BEFORE PUBLIC ../../out/lib)
target_link_libraries
我还尝试在最外面的CMakeLists.txt
中设置include_directories(out/lib)
在Linux this上发生错误。
答案 0 :(得分:2)
错误
JNF_NEAT / body.h:没有这样的文件或目录
不是链接错误,而是编译错误。
检查JNF_NEAT/body.h
是否确实存在。如果是,它可能不会包含在编译器查找#include
的目录列表中。您可以使用include_directories
命令在CMake中设置此项。
将给定目录添加到编译器用于搜索包含文件的目录中。相对路径被解释为相对于当前源目录。
include目录被添加到当前CMakeLists文件的INCLUDE_DIRECTORIES目录属性中。它们还会添加到当前CMakeLists文件中每个目标的INCLUDE_DIRECTORIES目标属性中。目标属性值是生成器使用的值。
默认情况下,指定的目录会附加到当前目录列表中。通过将CMAKE_INCLUDE_DIRECTORIES_BEFORE设置为ON,可以更改此默认行为。通过明确使用AFTER或BEFORE,您可以在附加和前置之间进行选择,与默认值无关。