与cmake,icc和pthreads(linux)链接
Linking with cmake, icc and pthreads (linux)
我正在尝试编译一个简单的测试项目,支持Intel C++ Compiler
、CMake
和std::threads
。
如果我这样做:
icpc -std=c++11 -lpthread source/main.cpp
然后构建和程序工作正常。
但是有了CMake
我得到一个错误:
CMake Error at CMakeLists.txt:21 (TARGET_LINK_LIBRARIES):
Cannot specify link libraries for target "test" which is not built by
this project.
CMakeLists.txt
是:
project(test)
set (CMAKE_CXX_FLAGS "-std=c++11")
set(SOURCE_LIST "source/main.cpp")
TARGET_LINK_LIBRARIES(${PROJECT_NAME} pthread)
add_executable (${PROJECT_NAME} ${SOURCE_LIST})
我正在由icc
(compilervars.sh
)提供的脚本设置的环境中构建,并使用-DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc
选项调用CMake
。如果我不使用线程,它可以工作。
我使用CMake
有什么问题?
谢谢!
回顾target_link_libraries
的文档,必须在使用之前声明目标:
命名的
<target>
必须已通过命令(如add_executable()
或add_library()
)在当前目录中创建。
顺便说一句,如本答案中所述,您不应该显式设置CMAKE_CXX_FLAGS
,而更喜欢设置CMAKE_CXX_STANDARD
和相关变量:
project(test)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(SOURCE_LIST "source/main.cpp")
add_executable(${PROJECT_NAME} ${SOURCE_LIST})
target_link_libraries(${PROJECT_NAME} pthread)
顺序错误:首先声明可执行文件,然后让 CMake 知道它存在
add_executable (${PROJECT_NAME} ${SOURCE_LIST})
然后添加链接库
TARGET_LINK_LIBRARIES(${PROJECT_NAME} pthread)
从target_link_libraries的文档中:
命名必须由 add_executable() 或 add_library() 等命令在当前目录中创建
相关文章:
- 如何在 Linux 中构建共享库时使未定义引用的链接器失败
- 在Linux(而不是OSX)中链接时发生库冲突
- 动态链接-Linux与Windows
- 如何在 Oracle Linux 上的 Eclipse 中编译和链接 boost 库
- 如何在Linux中使用GLFW函数正确链接C++对象?
- 使用 MINGW 和 CPLEX 库链接从 Linux 编译 Windows 可执行文件
- 将错误GoogleMock与我在linux下的C++项目链接
- linux/g++ 链接的多重定义
- 在 Linux 中编译/链接多个 C++ 库
- Ogre 3D共享库与CMAKE链接时,在Linux上执行二进制时找不到
- 您如何将所有链接依赖项都包装到一个Linux静态库中
- Cmake Mac OSX库链接问题:在Linux上进行编译,但在Mac上进行了编译
- 在 Linux 上的 Visual Studio 中链接两个项目
- Vulkan + GLFW + Cmake在Linux环境下的链接问题
- 如何链接到与 Linux 中不同版本的 boost 链接的共享库
- Linux:C++库在重新编译后无法链接
- 简单派生类上的Linux GCC链接错误
- Linux(X11)上GLFW上的链接器错误
- Linux 共享库链接错误(未定义的符号)
- Linux C++.链接共享对象和主对象