Как добавить параметры -nodefaultlibs в команду add_executable ()? - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть CMakeLists.txt для создания тестов с использованием g ++:

file(GLOB sources *.cpp)
foreach(src ${sources})
    get_filename_component(src ${src} NAME_WE)
    string(REPLACE "our_prefix" "" bin ${src})
    add_executable(${bin} ${src})
    target_link_libraries(${bin} our options go here) 
endforeach()

Что мне нужно сделать, это добавить опцию -nodefaultlibs к каждому тесту.Я пытался сделать это так:

file(GLOB sources *.cpp)
foreach(src ${sources})
    get_filename_component(src ${src} NAME_WE)
    string(REPLACE "our_prefix" "" bin ${src})
    add_executable(${bin} ${src})
    set_target_properties(${bin} PROPERTIES 
        INTERFACE_COMPILE_OPTIONS "-nodefaultlibs"
    )
    target_link_libraries(${bin} our options go here) 
endforeach()

Но, похоже, ничего не дало.Я также пытался использовать команду target_compile_options вместо set_target_properties - и это также не имело никакого эффекта.

Cmake генерирует файл link.txt для каждого теста -Я предполагаю, что этот файл описывает команду построения, используемую для теста.Этот файл не содержит мою опцию -nodefaultlibs.

Не могли бы вы объяснить, как правильно добавить опцию -nodefaultlibs?

1 Ответ

0 голосов
/ 24 декабря 2018

-nodefaultlibs - флаг компоновщика, поэтому используйте set_target_properties(${bin} PROPERTIES LINK_OPTIONS -nodefaultlibs) или target_link_libraries(${bin} PRIVATE -nodefaultlibs) или для CMake 3.2 set_target_properties(${bin} PROPERTIES LINK_FLAGS -nodefaultlibs).

INTERFACE_COMPILE_OPTIONS используется для чего-то другого, и target_compile_options не будет отображатьсяв строке ссылки.

Файл link.txt генерируется не всегда.При использовании MSYS Makefiles флаги компоновщика отображаются в linklibs.rsp.

...