CMake 在 Linux (Ubuntu) 上使用"target_include_directories"的方式与 OS X 不同
CMake uses "target_include_directories" differently on Linux (Ubuntu) than OS X
我有一个多目标cmake文件,其中所有目标在OS X上都很好地构建,但是当我在Ubuntu Linux上构建目标时,它不会链接target_include_directories中添加的系统库。
这是一个目标的示例(每个目标相似)。
set(SOURCE_FILES_TARGET)
set(RELEASE_LIBS iconv m xml2 z icucore resolv curl )
add_executable(TARGET_NAME ${SOURCE_FILES_TARGET)
target_include_directories(TARGET_NAME PRIVATE external_lib1/headers external_lib2/headers )
target_link_libraries(TARGET_NAME ${RELEASE_LIBS})
target_link_libraries(TARGET_NAME ${CMAKE_SOURCE_DIR}/lib1.a)
target_link_libraries(TARGET_NAME ${CMAKE_SOURCE_DIR}/lib2.a)
对于Linux(比较.la文件),库有点不同,但即使是相同的(XML2)也会导致未定义的参考错误。另外,在OS x上," target_link_libraries"命令如上所述,使用-lxml2格式。
我试图在Linux上添加" Pthreads"库(正如它要求的那样,但在OS X上不是),而我唯一能够添加它的方法是
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
但是,这是所有目标的全局设置。基本上,如果我将pthread放入target_link_libraries中,就像其余的那样。
。我应该如何最好地将这些库添加到目标中?也许我在OS X侧缺少一些东西,它恰好工作了吗?
不确定您的问题到底是什么,但是这里有一些可能对您有帮助的技巧。
您不应该尝试使用find_library()
来查找库,而不是设置库名称并告诉您对它们进行编译,而是应该尝试与CMAKE命令产生的变量链接程序。这样,Cmake实际上可能会告诉您是否找不到库。
例如:
find_library(XML2_LIBRARY xml2)
add_executable(TARGET_NAME ${XML2_LIBRARY})
这样,您可以提供几个可能的库名称(例如,根据您要编译的系统,名称可能不同)。另外,您可以告诉CMAKE在不更改CMakeLists.txt
的情况下查看其他目录(例如CMAKE_LIBRARY_PATH
)。
您还应该检查为您感兴趣的依赖项提供配置的CMAKE模块(CMAKE 3.7具有FindLibXml2
模块)。
对于pthread
,您应该检查CMAKE的FindThreads
。
- 既然存在危险,为什么项目要使用-I include开关
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何将更多文件夹添加到c++include路径
- 什么是"#include <boost/functional/hash.hpp> "?
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- C++包含来自 #include "DevEngine/Core.h" 的错误
- <filesystem> 在 clang 6 和 10 上 #include 错误
- 在 void 函数中使用 #include 变量C++
- N-API include an .so or dll
- 允许哪些令牌作为 #include 的参数?
- GCC 包含标头(使用"-include")CMake 未检测到的更改
- WebAssembly include OpenCV
- 如何在 c++ 中正确指定 #include 路径以使程序可移植
- 修改生成文件以简化框架 #include 路径
- VS2015/VC++ 在新类模板中禁用默认 #include "stdafx.h"
- macOS 致命错误:sys/_types/_int8_t.h:没有此类文件或目录 #include < sys/_types/_int8_t.h>
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 如何将构建的C++库安装到 /usr/include?
- 包含一批库和目录路径以"Include Additional Directories"视觉C++的任意方法
- 我如何知道 Ubuntu 11.04 中 gcc、g++/c++ 的"default include directories"、"default link directories"和"default