C++ 如何在不将目录包含到其他编译命令中的情况下构建目标?

C++ 如何在不将目录包含到其他编译命令中的情况下构建目标?,c++,linux,cmake,C++,Linux,Cmake,我在一个项目中有多个目标,还有子项目 在CMakeLists.txt的顶部,包含必要的文件夹: include_directories(8021QBG) include_directories(8021x) #sub project add_subdirectory(test) 然后我有建筑命令的描述。对于所有库,它们都是相同的: file(GLOB SOURCE_FILES 8021QBG/*.h 8021QBG/*.cpp ) add_li

我在一个项目中有多个目标,还有子项目

在CMakeLists.txt的顶部,包含必要的文件夹:

include_directories(8021QBG)
include_directories(8021x)

#sub project
add_subdirectory(test)
然后我有建筑命令的描述。对于所有库,它们都是相同的:

file(GLOB SOURCE_FILES
        8021QBG/*.h
        8021QBG/*.cpp
        )
add_library(8021qbg SHARED
        ${SOURCE_FILES}
        )
set_target_properties(8021qbg PROPERTIES LINKER_LANGUAGE CXX)
set(CMAKE_CXX_FLAGS_CUSTOM "-lxml2 -lm")
set_target_properties(8021qbg PROPERTIES COMPILE_FLAGS " ${CMAKE_CXX_FLAGS_CUSTOM} ${CMAKE_CXX_FLAGS_COMMON}")
但当我构建项目时,无论我看到的是哪个库,开头都是一样的:

/usr/bin/g++ -g -fPIC -I/home/user/cmake_libs/8021QBG -I/home/user/cmake_libs/8021x 
但是8021QBG和8021x是不同的库

它将所有目录包含到每个编译命令中

如何按每个库拆分包含的目录

/usr/bin/g++ -g -fPIC -I/home/user/cmake_libs/8021QBG
分别

/usr/bin/g++ -g -fPIC -I/home/user/cmake_libs/8021x 

如果您想建立两个不同的目标,请使用两个不同的包含,我建议:

照此 有了它,您可以为每个LIB创建一个目标


如果在同一个目标上包含这两个库,您将在同一个生成命令行中获得这两个包含。

属性用于编译器标志,而不是添加链接器库(通常使用:
目标链接库(8021qbg xml2 m)
@Someprogrammerdude,是的,谢谢你,我会修复它。拆分include怎么样?你能帮我吗?也许可以改用它吗?@Someprogrammerdude,我在我的测试子项目中添加了这个命令
target\u include\u目录(测试专用编码/变量\字段编码/数据包编码/utils)
重建后,我仍然看到此“测试”目标的其他包含,
包含\u目录
为所有全局目标设置。我将此命令添加到测试子项目中
目标包含\u目录(测试专用编码/变量\u字段编码/数据包编码/utils)
重建后,我仍然看到此“测试”目标的其他包含。您应该删除命令include\u目录。此命令在项目中包含该目录,并且当您在该项目中构建任何目标时,它将包含该目录列表。在您的情况下,您应该包括每个目标。