Как не скомпилировать части CMakeLists.txt, используя параметры строки cmd? - PullRequest
2 голосов
/ 30 апреля 2019

Я использую CMake 3.10.2 и поместил его в один из моих целевых файлов CMakeLists.txt ....

target_compile_definitions(mytarget PUBLIC USE_MY=${USE_MY})

Затем я могу использовать параметры в командной строке, такие как -DUSE_MY = 0, чтобы я мог поместить такие вещи в мои файлы c ++:

#ifdef USE_MY
   // code left out
#endif

Однако я также хотел бы иметь возможность исключать файлы в CMakeLists.txt из компиляции.

set(my_sources
    filea.cpp
    fileb.cpp
    filec.cpp (how would I leave out filec.cpp?)
)

А в моем верхнем уровне CMakeLists.txt оставьте всю библиотеку.

add_subdirectory(my_stuff/liba)
add_subdirectory(my_stuff/libb) (how to leave out this lib?)
add_subdirectory(my_stuff/libc

Так что я хотел бы также исключить некоторые файлы и цели из компиляции. Спасибо за любую помощь в этом.

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

В современном CMake вы бы сделали что-то вроде этого:

add_subdirectory(my_stuff/liba)

if (USE_MY)
    add_subdirectory(my_stuff/libb)
endif()

add_subdirectory(my_stuff/libc

Тогда для источников:

add_library(libB source1.cpp source2.cpp source3.cpp)

if (USE_MY)
    target_sources(libB source4.cpp source5.cpp)
endif()
2 голосов
/ 30 апреля 2019

Как подсказал @drescherjm, что-то вроде этого может работать для вас:

set(my_sources
    filea.cpp
    fileb.cpp
)
if(USE_MY)
    # Append filec if USE_MY is defined.
    set(my_sources ${my_sources} filec.cpp)
endif()

Аналогично,

add_subdirectory(my_stuff/liba)
if(USE_MY)
    add_subdirectory(my_stuff/libb)
endif()
add_subdirectory(my_stuff/libc

# ... other code here ...

# Link the libraries.
target_link_libraries(targetA ${my_liba} ${my_libc})
if(USE_MY)
    target_link_libraries(targetA ${my_libb})
endif()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...