Cygwin startup configuration is controlled by Windows environment variable
CYGWIN.
Not populating Cygwin PATH from Windows PATH avoids confusion from Windows programs being used instead of Cygwin programs.
Set Windows environment variable:
CYGWIN_NOWINPATH=1
will result in a basic Cygwin PATH like:
/usr/local/bin:/usr/bin
Look inside Cygwin “/etc/profile” for more environment variables that may be of interest.
NOTE: all Windows environment variables are
imported
by Cygwin.
Override these variables in ~/.profile or scripts if desired.
Libutil gives abstractions for OS-specific TTY operations.
When using these abstractions across macOS and Linux, use this preprocessing statement for the appropriate header:
OpenWatcom
is an open-source C/C++ compiler that can compile for a variety of systems, particularly legacy 16/32-bit Windows and DOS systems.
This can be of interest for retro gamers and those using old devices that have DOS-based software, including industrial controllers and two-way radio programming.
CMake supports OpenWatcom, and is conveniently used with a toolchain file.
GitHub Actions has easy scripting for OpenWatcom to test building of DOS programs from Linux.
CMake
target_compile_features
sets a transitive MINIMUM language standard necessary.
If the compiler defaults to a newer language standard, target_compile_features()
allows that default higher language standard.
This can make issues for legacy code that requires an older language standard.
For example, an old C++98 code may need to have the compiler in C++98 mode.
This is accomplished with the target property
CXX_STANDARD.
Other languages may have a similar property e.g. C_STANDARD.
CMake can add interface linking to imported libraries.
For example, a imported library obtained by find_package() or otherwise.
Normally, this would work like the following example to say link “stdc++fs” to example imported library “imported::lib” for GCC older than 9.1.
Function target_link_libraries()
should work,
but does not always work for some projects with a configure time error.
To workaround this issue if it arises, set target property
INTERFACE_LINK_LIBRARIES
directly like:
Many CMake users have muscle memory for the three-stanza configure, build, test with CMake:
cmake -B build
# configure CMake and generate build filescmake --build build
# compile and link binariesctest --test-dir build
# run program self-tests
This can be reduced to a single command for many programs:
ctest -S setup.cmake
where a single file
setup.cmake
is added to the project.
Command-line options like “-Dvar=yes” must be aggregated and passed along to
ctest_configure(OPTIONS)
in setup.cmake.
Capture the number of physical CPU cores available on a computer from Matlab:
functionN =get_cpu_count()%% get apparent number of physical CPU coresN = maxNumCompThreads;
if N < 2% happens on some HPC N = feature('NumCores');
endend
Python can easily be used from CMake, perhaps to simplify test scripts for continuous integration.
Python scripts are managed in CMakeLists.txt.
First, find Python interpreter:
find_package(PythonCOMPONENTSInterpreterREQUIRED)
Then to run a simple Python script in a CMake test:
Octave uses
startup.m
persistent user settings like Matlab.
To keep Matlab compatibility, put Octave-specific startup commands and plotting defaults into
~/.octaverc,
which sets default parameters for all GNU Octave sessions.
eliminate nuisance octave-workspace files that appear when Octave is Ctrl+c
exited or crashes.
page_output_immediately(1)
make Octave print immediately like Matlab.
if exist
use startup.m file like Matlab.
Set plot defaults: useful for HiDPI systems, control Octave default plot text size of axes and titles, useful for HiDPI systems by adding to “~/.octaverc”: