为什么设置(CMAKE_C_FLAGS“ $ {CMAKE_C_FLAGS} -ldl”)不起作用?

时间:2019-11-01 16:02:42

标签: c c++11 cmake gun

当我的应用程序需要链接pthread库时,我在CmakeLists.txt中写了Parameters: LatestAmiId: Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref LatestAmiId 并起作用。但是,当我需要链接dl lib时,set ( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lpthread")不起作用。如果我直接使用gcc, set ( CMAKE_C_FLAGS_C_FLAGS "${CMAKE_C_FLAGS} -ldl")可以正常工作。在Google之后,我知道gcc sqlite3.c shell.c -lpthread -ldl可以工作。我尝试过。我确实可以工作。我想知道为什么target_link_libraries(MY_TARGET LIB1 LIB2 ... LIBN ${CMAKE_DL_LIBS})不起作用吗?

1 个答案:

答案 0 :(得分:2)

似乎您正在尝试链接dl库。但是,CMAKE_C_FLAGS仅影响编译,而不影响链接。也许您宁愿设置CMAKE_*_LINKER_FLAGS(链接器标志分别用于EXESHAREDMODULE)。

但是,如前所述, modern 声明已使用库的方法是target_link_libraries命令。

此处是相应的文档链接。