这是我的第一个CMakeLists.txt代码:
#cmake_minimum_required (VERSION 2.6)
project (project)
add_subdirectory(src)
include_directories(${/path_to_directory}/include)
这是子目录中的CMakeLists.txt
set (CMAKE_C_FLAGS "-WALL -g")
file(GLOB SRCS *.cpp *.hpp *.h)
add_executable(source ${SRCS})
我仍然无法在项目中包含path_to_directory
编辑:这也不起作用:
file(GLOB mylib *.cpp *.hpp *.h)
add_executable(includeSource ${mystuff})
target_include_directories(
mystuff
PUBLIC ${path_to_directory}/include
)
答案 0 :(得分:1)
即使问题不明确,我想您需要target_include_directories
(here文档)而不是include_directories
。
来自文档:
指定编译给定目标时要使用的包含目录或目标。
您可以将其用作:
target_include_directories(
your_target_name
PUBLIC ${/path_to_directory}/include
)
答案 1 :(得分:1)
根据您的前两个代码,我了解您的可执行文件source
无法编译,因为您的编译器找不到${/path_to_directory}/include
中的包含文件。
根据这个假设,我可以说你错放了include_directories(${/path_to_directory}/include)
,它应该在子目录的CMakeLists.txt中。
documentation of include_directories将帮助您理解:
include目录被添加到当前CMakeLists文件的
INCLUDE_DIRECTORIES
目录属性中。它们还会添加到当前CMakeLists文件中每个目标的INCLUDE_DIRECTORIES
目标属性中。目标属性值是生成器使用的值。
否则,您可以将主CMakeLists.txt中的include_directories(${/path_to_directory}/include)
替换为@ target_include_directories(source PUBLIC ${/path_to_directory}/include)
@skypjack建议。它会影响子目录的CMakeLists.txt中的源目标。
附加评论和建议
您想要编译c ++源文件,但您要定义CMAKE_C_FLAGS而不是CMAKE_CXX_FLAGS。
set (CMAKE_C_FLAGS "-Wall -g")
会很危险。首选set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -g")
file(GLOB ...)
不建议查找源文件。 See the documentation:
我们不建议使用GLOB从源树中收集源文件列表。如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时要求CMake重新生成。
add_subdirectory
就没用了。您只能在一个主CMakeLists.txt