Gcc 在命令行中编译fine时,使用CMakeLists会导致错误
我正在编译我的代码,其中我在C中使用posix线程 我正在使用CLion及其CMakeLists.txt:Gcc 在命令行中编译fine时,使用CMakeLists会导致错误,gcc,cmake,posix,clion,Gcc,Cmake,Posix,Clion,我正在编译我的代码,其中我在C中使用posix线程 我正在使用CLion及其CMakeLists.txt: cmake_minimum_required(VERSION 3.7) project(Test) set(CMAKE_C_STANDARD 99) add_definitions(-lpthread) set(SOURCE_FILES main.c) add_executable(Test ${SOURCE_FILES}) 我收到错误(例如:未定义对sem_init'`的引用)
cmake_minimum_required(VERSION 3.7)
project(Test)
set(CMAKE_C_STANDARD 99)
add_definitions(-lpthread)
set(SOURCE_FILES main.c)
add_executable(Test ${SOURCE_FILES})
我收到错误(例如:未定义对
sem_init'`的引用)
建议的解决方案是添加-lpthread
编译器标志,但我已经添加了它
我从命令行编译了相同的代码:
gcc main.c -lpthread
它编译起来没有任何问题
什么是可能的问题/解决方案?完全删除
添加定义(-lpthread)
,因为pthread不是定义,而是库依赖项
在添加可执行文件()之后添加:
此外,如果您想在不检查文件的情况下查看CMake正在使用的命令,可以在命令行中使用它,并使用CMake-DCMAKE\u VERBOSE\u MAKEFILE=on…
顺便说一句,总是喜欢所有的target.*
命令,比如target\u compile\u definitions()
,而不是老式的add\u definitions()
。这将保持项目属性和依赖项的干净,并将不同目标之间的干扰降至最低
如果在上述更改之后,您的代码仍然无法编译,那么代码本身很可能是错误的(与CMake无关)。可能是重复的
target_link_libraries(Test pthread)